繁体   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