Предположим, у меня есть две таблицы Table_1 и Table_2.
Оба имеют одинаковые столбцы.
@Table_1
| Id | Col1 | Col2 | Col3 |
| 1 | a | b | c |
| 2 | d | e | f |
и
@Table_2
| Id | Col1 | Col2 | Col3 |
| 1 | a | 0 | 0 |
| 3 | z | z | y |
Как написать хранимую процедуру, которая будет принимать строки из Table_1
, сравнивать каждый столбец этой строки со строкой в Table_2
и соответственно обновлять столбцы Table_2
. И если строка в Table_1
не найдена в Table_2
, просто вставьте ее.
Теперь. Я понимаю, что INSERT
легко написать, что, вероятно, будет выглядеть как
insert into @Table_2(col1, col2, col3)
select col1, col2, col3 from @Table_1 where id = @id
Конечный результат для Table_2
после выполнения хранимой процедуры должен выглядеть следующим образом
@Table_2
| Id | Col1 | Col2 | Col3 |
| 1 | a | b | c |
| 2 | d | e | f |
| 3 | z | z | y |
Как насчет сравнения каждой строки и столбца Table_1
с данными в Table_2
?
@ Ответ Мартина Микса работает как два отдельных утверждения!
Согласно https://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/, предоставленному пользователем @SQL_M с использованием MERGE
операторов, не идеально, но работает
@ Сценарий Джаясурьи Сатиши тоже работает, но использует MERGE
выражение