あなたは、この問題のためにマージステートメントを使用することができます。ここで
CREATE TABLE #t
(
ID int IDENTITY(1,1),
Name NVARCHAR(50),
Salary DECIMAL(10,2)
)
INSERT INTO #t (Name, Salary) VALUES('abc', 123.4)
INSERT INTO #t (Name, Salary) VALUES('pqa', 127.4)
INSERT INTO #t (Name, Salary) VALUES('xyz', 233.4)
CREATE TABLE #tempForT
(
ID int IDENTITY(1,1),
Name NVARCHAR(50),
Salary DECIMAL(10,2)
)
INSERT INTO #tempForT (Name, Salary) VALUES('abc', 200.4)
INSERT INTO #tempForT (Name, Salary) VALUES('pqa', 200.4)
INSERT INTO #tempForT (Name, Salary) VALUES('xyz', NULL)
SELECT * FROM #t
SELECT * FROM #tempForT
ソリューション
MERGE #t AS DestTable
USING (
SELECT
NAME,
Salary
FROM #tempForT
)SourceTable
ON DestTable.Name = SourceTable.Name --Should contain columns like composite primary key
--AND other columns
WHEN MATCHED
THEN
UPDATE
SET DestTable.Salary = ISNULL(SourceTable.Salary, DestTable.Salary) --checking for NULL
;
SELECT * FROM #t
注です:#tempForTは、新しい値(行)が含まれている場合は、それらの行を取得することはありませんあなたのためにそれを挿入する必要がありますeマージステートメントと一致しない場合は新しいレコードを挿入します。
2つのテーブルを結合する結合ステートメントと、各列のケース式を使用します。 –
あなたの答えを詳述し、彼が更新ステートメントでどのように参加することができるか説明してください。 – TheEsnSiavashi
http://stackoverflow.com/questions/2334712/how-to-update-from-a-select-in-sql-server – nscheaffer