обновить таблицу из хранимой процедуры - PullRequest
0 голосов
/ 26 сентября 2018

Я использую 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» и оставлю ВСТАВКУ, она просто продолжит дублировать все.Мне просто нужно обновить новые строки, как они появляются.

С помощью ответа Зайнулса, приведенного ниже, я попробовал следующее

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)

1 Ответ

0 голосов
/ 26 сентября 2018

используйте слияние, как показано ниже, предположим, что ваш 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
...