Вставка и удаление несоответствующих записей

#c# #asp.net #sql #sql-server-2008

#c# #asp.net #sql #sql-server-2008

Вопрос:

У меня есть asp.net веб-приложение, в котором пользователь может обновлять таблицу в базе данных.

У меня есть таблица, которая выглядит следующим образом в SQL Server 2008:

 lom_number(fk) problem   primarykey
1            AA       1
1            AA1      2
1            AA3      3
23           B        4
22           C        5
 

Пользователь имеет интерфейс и может вносить изменения в эти данные на основе foreignkey

Пользователь может обновлять данные следующим образом:

  1. если target.foreignkey = source.foreignkey И target.model = source.model, то ничего не делайте
  2. если (foreignkey, model) в цели не существует в источнике, удалите строку
  3. если (foreignkey, model) в источнике не существует в цели, вставьте его

Пока у меня есть это:

 create procedure Merge_lom_problem
as
merge [dbo].lom_problem as target
using temp.lom_problem as SOURCE
on (target.lom_number = SOURCE.lom_number)
when matched and (target.problem <> SOURCE.problem)
insert (lom_number,problem) values (SOURCE.lom_number,SOURCE.problem)
when matched and 
 

Но у меня возникли проблемы с # 2 и # 3.

Не могли бы вы, пожалуйста, помочь его закодировать?

Комментарии:

1. Вероятно, было бы очень полезно, если бы поля вашей таблицы соответствовали вашему sql. Является ли Lom_problem PK или Lom_number?

2. @conrad очень сожалею! спасибо, что отметили это. lom_number — FK

3. @ConradFrix ты там, мой друг. пожалуйста

Ответ №1:

первая проблема вы сказали, что ничего не делаете правильно?

попробуй это

 create procedure Merge_lom_problem
as
merge [dbo].lom_problem as target
using temp.lom_problem as SOURCE
on (target.lom_number = SOURCE.lom_number)
--when matched and target.problem = SOURCE.problem then

when not matched by source then
DELETE

when not matched by target then
insert (lom_number,problem) values (SOURCE.lom_number,SOURCE.problem)
 

но я не совсем уверен, что это сработает, потому что я еще не протестирован