我正在使用SQL Management Studio 2012,我有一个存储过程,执行时会插入到如下所示的表中
Column1 Column2 Column3
AA AA1 NULL
AB AB1 NULL
AC AC1 NULL
我必须手动填写 NULL 值(我知道这并不理想,但这是我发现自己陷入的困境(
Column1 Column2 Column3
AA AA1 1234 --manual input
AB AB1 2468 --manual input
AC AC1 3579 --manual input
我最初设置了这样的存储过程
ALTER PROCEDURE [usp_My_Stored_Procedure]
AS BEGIN
DELETE table1
INSERT table1
Select * from (
select
Column1,Column2,Column3
from another table
where Column3 IS NULL
) as SP
;
END
现在,当它执行时,它将删除我在第 3 列中输入的所有内容。 如果我摆脱了"删除表1"并保留插入,它只会继续复制所有内容。 我只需要它在出现新行时更新它们。
在下面的Zaynuls回答的帮助下,我现在已经尝试了以下方法
ALTER PROCEDURE [usp_My_Stored_Procedure]
AS BEGIN
MERGE Table1 as d
USING SP as s
ON (d.Column1 = S.Column1)
WHEN NOT MATCHED BY TARGET THEN
INSERT (Column1, Column2, Column3 )
VALUES (s.Column1, s.Column2, s.Column3)
WHEN MATCHED THEN
UPDATE SET d.Column1 = s.Column1, d.Column2 = s.Column2, d.Column3 = s.Column3
WHEN NOT MATCHED BY SP THEN DELETE
Select * from (
select
Column1,Column2,Column3
from another table
where Column3 IS NULL
) as SP
;
END
这没有奏效,认为我对源和目的地感到困惑。 在这种情况下,我将目标用作我输入数据的表("Table1"(和源作为派生表名称 (SP(
像下面这样使用合并,假设你的 2 个表源和目标
merge destination as D
using Source as S
on (D.Column1=S.Column1)
when not matched by Target then
Insert(Column1,Column2,Column3)
Values(s.Column1,s.Column2,S.Column3)
when matched then
Update set D.Column2=S.Column2, D.Column3=S.Column3
when not matched by Source then
Delete