C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

SQLServer の Insert Update の方法

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■96972 / inTopicNo.1)  SQLServer の Insert Update の方法
  
□投稿者/ 紅雀 (1回)-(2021/03/08(Mon) 11:29:46)

分類:[データベース全般] 

SQLServer を使用しています。
以下はテストサンプルになります。

DECLARE @PERSON1 TABLE (
PERSON_ID INT NOT NULL PRIMARY KEY,
PERSON_NAME NVARCHAR(20) NOT NULL,
GENDER TINYINT NOT NULL
)
DECLARE @PERSON2 TABLE (
PERSON_ID INT NOT NULL PRIMARY KEY,
PERSON_NAME NVARCHAR(20) NOT NULL,
GENDER TINYINT NOT NULL
)

INSERT INTO @PERSON1
(PERSON_ID, PERSON_NAME, GENDER)
VALUES
(101, 'Henry', 1),
(102, 'Nancy', 2),
(103, 'James', 1);

INSERT INTO @PERSON2
(PERSON_ID, PERSON_NAME, GENDER)
VALUES
(101, 'Aoyama', 1),
(201, 'Bando', 1),
(302, 'Daimon', 2);


複数のデータを
インサートとアップデートを1行(同時)に処理
できるSQLを教えてください
ネットでは @@ROWCOUNT や MERGE を使うようなのですが
複数データの場合がわかりません。

@PERSON1 のテーブルに

以下のデータ
SELECT *
FROM @PERSON2
WHERE GENDER = 1

を追加、編集するにはどうすればよいのでしょうか?

結果は以下のようになると思います。

(101, 'Aoyama', 1)
(102, 'Nancy', 2)
(103, 'James', 1)
(201, 'Bando', 1)


引用返信 編集キー/
■96973 / inTopicNo.2)  Re[1]: SQLServer の Insert Update の方法
□投稿者/ 紅雀 (2回)-(2021/03/08(Mon) 11:38:02)
お手数おかけしました。
以下のようにしたらできました。

MERGE INTO @PERSON1 AS A
USING (SELECT * FROM @PERSON2 WHERE GENDER = 1) AS B
ON ( A.PERSON_ID = B.PERSON_ID )
WHEN MATCHED THEN
UPDATE
SET PERSON_NAME = B.PERSON_NAME,
GENDER = B.GENDER
WHEN NOT MATCHED THEN
INSERT (PERSON_ID, PERSON_NAME, GENDER)
VALUES (
B.PERSON_ID,
B.PERSON_NAME,
B.GENDER
);
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ