从存储过程更新表



我正在使用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

最新更新