sql >> Database >  >> RDS >> Sqlserver

Het resultaat van de SQL MERGE-instructie bepalen

Wat u zou kunnen doen, is een tijdelijke tabel (of een tabelvariabele) maken en uw uitvoer daarheen sturen - voeg enkele zinvolle velden toe aan uw OUTPUT-clausule om duidelijk te maken welke rij werd beïnvloed door welke actie:

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

UPDATE: ah, oké, dus je wilt dit vanuit .NET noemen! Nou, in dat geval, roep het gewoon aan met de .ExecuteReader() methode op uw SqlCommand object - de dingen die je uitvoert met OUTPUT... wordt teruggestuurd naar de .NET-beller als resultaatset - u kunt dat doorlopen:

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

U zou de resulterende "$action" van die gegevenslezer moeten terugkrijgen.




  1. Oplossing:"SQLServerAgent is momenteel niet actief ..."

  2. Speel 2.2 met Hibernate JPA en Postgres

  3. SQL ORDER BY met behulp van voorbereide instructies

  4. SQL:Dynamische weergave met kolomnamen op basis van kolomwaarden in brontabel