簡體   English   中英

通過ADO.NET命令對象執行的多條SQL語句

[英]Multi SQL statements executed via ADO.NET command object

我需要更新表中的記錄,但是該記錄可能不存在,因此需要插入記錄。

下面是一條SQL語句,它通過首先嘗試更新記錄來實現我的目標,如果不存在,它將執行插入操作。 我想知道它是否可以通過ADO.NET命令對象直接執行,還是需要進入存儲過程。

UPDATE MyTable SET ReservationDate = @ReservationDate WHERE CustomerNumber = XXXX;
IF @@ROWCOUNT=0
  INSERT INTO MyTable (CustomerNumber , ReservationDate) 
  VALUES (@CustomerNumber , @ReservationDate)

如果我可以在沒有存儲過程的情況下通過命令對象執行它,則意味着對部署時間的依賴性(即,部署存儲過程)將減少一個依賴性。

T-SQL中的MERGE命令僅適用於這種情況

string cmdText = @"MERGE MyTable T
                   USING (SELECT @CustomerNumber As CustomerNumber) as S 
                   ON T.CustomerNumber = S.CustomerNumber
                   WHEN MATCHED UPDATE SET ReservationDate = @ReservationDate 
                   WHEN NOT MATCHED INSERT INTO (CustomerNumber , ReservationDate)  
                                    VALUES (@CustomerNumber , @ReservationDate)";

多虧了逐字字符@,它只是一個文本字符串,包裝起來便於多行閱讀

使用MERGE您可以開始定義TARGET表(T),然后使用包含TARGET中主鍵字段值的參數構建一個名為SOURCE (S)的偽表。 現在,這兩個表已JOINED ONCustomerNumber字段上。 取決於TARGET表中記錄的先前存在情況,此NOT MATCHED可以是MATCHEDNOT MATCHED 查詢的其余部分可能是不言自明的,只是請注意,在兩個操作(UPDATE和INSERT)中,無需重復MyTable名稱(它是TARGET)

順便說一句,是的,您可以將多個命令傳遞給以分號分隔的SqlCommand

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM