Това, което можете да направите, е да създадете временна таблица (или променлива на таблица) и да изпратите изхода си там - добавете някои смислени полета към вашата клауза 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 повикващия като набор от резултати - можете да преминете през това:
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" от този четец на данни.