Những gì bạn có thể làm là tạo một bảng tạm thời (hoặc một biến bảng) và gửi đầu ra của bạn ở đó - thêm một số trường có ý nghĩa vào mệnh đề OUTPUT của bạn để làm rõ hàng nào bị ảnh hưởng bởi hành động nào:
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
CẬP NHẬT: à, được rồi, vì vậy bạn muốn gọi cái này từ .NET! Trong trường hợp đó, chỉ cần gọi nó bằng cách sử dụng .ExecuteReader()
trên SqlCommand
của bạn đối tượng - nội dung bạn đang xuất bằng OUTPUT...
sẽ được trả về trình gọi .NET dưới dạng tập hợp kết quả - bạn có thể lặp lại điều đó:
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();
}
Bạn sẽ lấy lại kết quả "$ action" từ trình đọc dữ liệu đó.