Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak upsert (zaktualizować lub wstawić) w SQL Server 2005

Spróbuj sprawdzić istnienie:

IF NOT EXISTS (SELECT * FROM dbo.Employee WHERE ID = @SomeID)

    INSERT INTO dbo.Employee(Col1, ..., ColN)
    VALUES(Val1, .., ValN)

ELSE

    UPDATE dbo.Employee
    SET Col1 = Val1, Col2 = Val2, ...., ColN = ValN
    WHERE ID = @SomeID

Możesz łatwo zapakować to w procedurę składowaną i po prostu wywołać tę procedurę składowaną z zewnątrz (np. z języka programowania takiego jak C# lub innego, którego używasz).

Aktualizacja: albo możesz po prostu napisać całą instrukcję w jednym długim łańcuchu (wykonalne - ale niezbyt przydatne) - albo możesz opakować ją w procedurę składowaną:

CREATE PROCEDURE dbo.InsertOrUpdateEmployee
       @ID INT,
       @Name VARCHAR(50),
       @ItemName VARCHAR(50),  
       @ItemCatName VARCHAR(50),
       @ItemQty DECIMAL(15,2)
AS BEGIN
    IF NOT EXISTS (SELECT * FROM dbo.Table1 WHERE ID = @ID)
       INSERT INTO dbo.Table1(ID, Name, ItemName, ItemCatName, ItemQty)
       VALUES(@ID, @Name, @ItemName, @ItemCatName, @ItemQty)
    ELSE
       UPDATE dbo.Table1
       SET Name = @Name,
           ItemName = @ItemName,
           ItemCatName = @ItemCatName,
           ItemQty = @ItemQty
       WHERE ID = @ID
END

a następnie po prostu wywołaj tę procedurę składowaną z kodu ADO.NET



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień istniejącą kolumnę na kolumnę obliczoną w SQL Server (przykład T-SQL)

  2. Grupuj wiersz według sumy określonej kolumny równej określonej wartości

  3. Potrzebny dynamiczny przestawny z Row_Number()

  4. SQL Server 2008 Zmiana przechwytywania danych, kto dokonał zmiany?

  5. 3 sposoby uzyskania etapów zadania zadania agenta serwera SQL (T-SQL)