Предположим, у меня есть две таблицы 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
?
Ответ @Martyn Meeks работает как два отдельных утверждения!
Согласно https://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/, предоставленный пользователем @SQL_M с использованием операторов MERGE
, не идеален, но работает
Скрипт @Jayasurya Satheesh тоже работает, но использует оператор MERGE