sql >> Database teknologi >  >> RDS >> Sqlserver

Bestemmelse af SQL MERGE-sætningsresultat

Hvad du kunne gøre er at oprette en midlertidig tabel (eller en tabelvariabel) og sende dit output dertil - tilføj nogle meningsfulde felter til din OUTPUT-klausul for at gøre det klart, hvilken række der blev påvirket af hvilken handling:

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

OPDATERING: ah, okay, så du vil kalde dette fra .NET ! Nå, i så fald skal du bare kalde det ved at bruge .ExecuteReader() metode på din SqlCommand objekt - de ting, du udsender ved hjælp af OUTPUT... vil blive returneret til .NET-kalderen som et resultatsæt - du kan gå igennem det:

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

Du bør få den resulterende "$action" tilbage fra den datalæser.




  1. Laravel opdatering/rediger ved hjælp af foreach loop

  2. IRI produktnomenklatur og arkitektur

  3. PHP &MySql tjek om tabellen er tom

  4. Udfyld automatisk dato i Oracle-tabellen