T-SQL: объединить или вставить дочернюю таблицу - PullRequest
0 голосов
/ 05 июля 2018

У меня есть три таблицы с данными, как показано на следующем снимке экрана:

enter image description here

У меня есть рабочий оператор MERGE для таблицы Users, который отправляется на SQL Server из C #. Оператор MERGE правильно объединяет данные в таблицу ICS_USERS. Таблица #temp также создается и заполняется в C #:

MERGE INTO ICS_Users AS Target 
USING #temp AS Source ON TARGET.USerID = Source.UserId 

WHEN MATCHED THEN 
    UPDATE 
    SET TARGET.UserName = Source.UserName, TARGET.Active = Source.Active 

WHEN NOT MATCHED THEN 
    INSERT(UserName, Active, UserInitials) 
    VALUES(Source.UserName, Source.Active, Source.UserInitials)

Я хочу разрешить пользователю добавлять / изменять / удалять роль для пользователя и отправлять оператор MERGE для его обработки. Обратите внимание, что пользователю будет разрешено изменять только одного пользователя одновременно.

Как изменить оператор слияния для учета ассоциативной таблицы Роль и Пользователь / Роль?

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете выполнить следующие шаги для достижения этого.

  1. Создайте хранимую процедуру, которая будет принимать все входные параметры, необходимые для объединения, вставки, обновления и удаления значений с использованием источника и цели. Сделайте все параметры необязательными или нулевыми, чтобы вы могли выполнять слияние даже без входных значений.

  2. Вставьте все эти значения в табличную переменную, которая будет иметь тот же столбец, что и ваши целевые таблицы, и тот же тип данных.

  3. Используйте вашу фактическую исходную таблицу, а также переменную таблицы и объедините их, а затем используйте вывод в логике слияния.

Это выполнит ваши оба требования в одном операторе слияния. Даже при вводе столбцов будет нулевой первый запрос в объединении всегда будет иметь значения, достаточные для логики слияния.

Попробуйте, если это не сработает, прокомментируйте, и я предоставлю вам скрипт sql. Здесь я не предоставляю sql намеренно, чтобы вы могли хотя бы самостоятельно прочитать и попробовать и написать логику в sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...