[英]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 ON
在CustomerNumber
字段上。 取決於TARGET
表中記錄的先前存在情況,此NOT MATCHED
可以是MATCHED
或NOT MATCHED
。 查詢的其余部分可能是不言自明的,只是請注意,在兩個操作(UPDATE和INSERT)中,無需重復MyTable名稱(它是TARGET)
順便說一句,是的,您可以將多個命令傳遞給以分號分隔的SqlCommand
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.