Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Xác định kết quả câu lệnh SQL MERGE

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 đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ước tính tham gia máy chủ SQL sử dụng Căn chỉnh thô biểu đồ

  2. lấy tất cả các con lồng nhau cho một id cha

  3. Cách xuất truy vấn SQL Server 2005 sang CSV

  4. Sự khác biệt về thời gian thực hiện thủ tục được lưu trữ trong SQL

  5. Tổng các chữ số của một số trong máy chủ sql mà không cần sử dụng các vòng lặp truyền thống như while