Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menentukan hasil pernyataan SQL MERGE

Yang dapat Anda lakukan adalah membuat tabel sementara (atau variabel tabel) dan mengirimkan output Anda ke sana - tambahkan beberapa bidang bermakna ke klausa OUTPUT Anda untuk memperjelas baris mana yang terpengaruh oleh tindakan apa:

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

PERBARUI: ah, oke, jadi Anda ingin memanggil ini dari .NET ! Nah, kalau begitu, panggil saja menggunakan .ExecuteReader() metode pada SqlCommand Anda objek - hal-hal yang Anda hasilkan menggunakan OUTPUT... akan dikembalikan ke pemanggil .NET sebagai hasil set - Anda dapat mengulanginya:

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();
}

Anda harus mendapatkan kembali "$action" yang dihasilkan dari pembaca data tersebut.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbarui beberapa kolom dalam SQL

  2. Pro dan Kontra menggunakan SqlCommand Siapkan di C#?

  3. Kesalahan overflow aritmatika mengubah ekspresi menjadi tipe data menjadi

  4. Tidak dapat memasukkan nilai eksplisit untuk kolom identitas dalam tabel 'tabel' ketika IDENTITY_INSERT disetel ke OFF

  5. Cara memanfaatkan huruf pertama dari catatan dalam SQL