[英]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.