调用MERGE之后,是否可以确定记录是否匹配(是否插入或更新了记录)?
理想情况下,我想将其输出到参数。
编辑:使用以下语句,我得到了合并语句输出在我的管理工作室中发生的事情:说我有以下合并语句:
MERGE INTO TestTable as target USING ( select '00D81CB4EA0842EF9E158BB8FEC48A1E' ) AS source (Guid) ON ( target.Guid = source.Guid ) WHEN MATCHED THEN UPDATE SET Test_Column = NULL WHEN NOT MATCHED THEN INSERT (Guid, Test_Column) VALUES ('00D81CB4EA0842EF9E158BB8FEC48A1E', NULL) OUTPUT $action;
我正在尝试使用参数来获取“ $ action”输出。
您可以做的是创建一个临时表(或一个表变量)并将其发送到那里-在OUTPUT子句中添加一些有意义的字段,以清楚表明哪个行受到了什么操作的影响:
DECLARE @OutputTable TABLE (Guid UNIQUEIDENTIFIER, Action VARCHAR(100)) MERGE INTO TestTable as target USING ( select '00D81CB4EA0842EF9E158BB8FEC48A1E' ) AS source (Guid) ON ( target.Guid = source.Guid ) WHEN MATCHED THEN UPDATE SET Test_Column = NULL WHEN NOT MATCHED THEN INSERT (Guid, Test_Column) VALUES ('00D81CB4EA0842EF9E158BB8FEC48A1E', NULL) OUTPUT INSERTED.Guid, $action INTO @OutputTable SELECT Guid, Action FROM @OutputTable
更新: 啊,好的,所以您想从.NET调用它!好吧,在这种情况下,只需使用对象.ExecuteReader()上的方法调用它SqlCommand-您正在使用的输出内容OUTPUT...将作为结果集返回给.NET调用者- 您可以遍历该对象:
.ExecuteReader()
SqlCommand
OUTPUT...
using(SqlCommand cmd = new SqlCommand(mergeStmt, connection)) { connection.Open(); using(SqlDataReader rdr = cmd.ExecuteReader()) { while(rdr.Read()) { var outputAction = rdr.GetValue(0); } rdr.Close(); } connection.Close(); }
您应该从该数据读取器中获得结果“ $ action”。