CTEからのデータでPersons2の行全体を更新する作業をしています。このアクションを実行する最も簡単な方法は何でしょうか?SQL ServerのCTEからの新しいデータを含むテーブルの更新
私が使用しているコードは以下の通りです。Persons1
とPersons2
テーブルを使用しているCTEからデータを取得しています。結果が得られたら、私はPersons2
にデータ全体(行)を挿入したい(Persons2の前のデータは必要ない)。
ケース1:私はこれをやっている場合は、重複したデータがPersons2に追加された(それだけでアウトを行う削除して新しいデータを挿入され、コマンドはここに私を許可していません削除)
あなたのソリューションがあります私にとって最も貴重な、ありがとう。
;WITH tabtemp AS
(
SELECT
COALESCE(p1.id, p2.id) AS ID,
COALESCE(p1.name, p2.name) AS Name,
COALESCE(p1.phnumber, p2.phnumber) AS PHNumber,
CASE
WHEN p1.name IS NULL THEN 0
ELSE 1
END AS IsActive
FROM
Persons1 p1
FULL JOIN
Persons2 p2 ON p1.name = p2.name
AND p1.phnumber = p2.phnumber)
INSERT INTO Persons2 (ID, Name, PHNumber, IsActive)
SELECT *
FROM tabtemp
なぜp2データが存在する場合は、挿入の代わりに更新を使用しますか? –
[MERGE(2008+)について読む](https://msdn.microsoft.com/en-us/library/bb510625.aspx) – Shnugo