Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Определяне на резултата от оператора SQL MERGE

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразуване на номер на месец в името на месеца в SQL Server (T-SQL)

  2. Изключително бавно стартиране на EF - 15 минути

  3. sql заявка за динамично добавяне на фискален месец с помощта на осно

  4. Разлика между две дати в точен брой часове в SQL

  5. java.sql.SQLException:Не е намерен подходящ драйвер за jdbc:microsoft:sqlserver