1. ホーム
  2. sql-server-2005

[解決済み] SQL Server 2005でアップサート(更新または挿入)する方法

2022-03-06 23:54:13

質問

従業員の行を挿入しているテーブルがありますが、次に行を挿入するときに、その従業員のデータを再度挿入するのではなく、必要な列で更新したいのです。

SQL Server 2005でこれを行うにはどうすればよいですか?

jspを使用しています。

私のクエリは

String sql="insert into table1(id,name,itemname,itemcatName,itemQty)values('val1','val2','val3','val4','val5')";

初めてならデータベースに挿入し、存在するなら更新する。

どうすればいいのでしょうか?

解決するには?

存在確認をしてみてください。

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

これをストアドプロシージャにラップして、外部から(例えばC#などのプログラミング言語から)そのストアドプロシージャを呼び出せばいいだけですから、簡単ですね。

更新してください。 このステートメント全体を1つの長い文字列で書くか(可能ですが、あまり有用ではありません)、ストアドプロシージャにラップするか、どちらかです。

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

そして、ADO.NETコードからそのストアドプロシージャを呼び出すだけです。