теория sql server об обновлении таблицы

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

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

Вопрос:

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

введите описание изображения здесь

Вот шаги, которые мне нужно предпринять:

  1. Не обновляйте данные, если они существуют
  2. Удаление данных, которых нет в пользовательском обновлении
  3. Добавьте данные из пользовательского обновления, которых еще нет в таблице

Мне также нужно провести аудит этой таблицы, поэтому у меня будет триггер для нее. Я хотел бы теоретически знать, каков наилучший способ выполнить такое обновление таблицы?

спасибо Аарону, который представил концепцию слияния.

Вот как выглядят данные таблицы:

 foreignkey  model  primarykey
1            AA       1
1            AA1      2
1            AA3      3
23           B        4
22           C        5
  

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

 foreignkey  model  primarykey
1            A1       1
1            AA1      2
1            AA3      3
22           C        5
  

Как вы можете видеть, первая строка была обновлена, а предпоследняя строка была полностью удалена. Не могли бы вы помочь мне с этим заявлением о слиянии?

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

1. кто-нибудь еще хочет попробовать это?

Ответ №1:

Да, это возможно, и это называется слиянием. См. Документацию для инструкции SQL Server MERGE .

Если вы не хотите выполнять какие-либо обновления, если данные уже существуют, просто не добавляйте WHEN MATCHED предложение. ИСПОЛЬЗУЙТЕ WHEN NOT MATCHED BY SOURCE и WHEN NOT MATCHED BY TARGET для вставки / удаления отсутствующих / удаленных строк.