Member 11856456 Ответов: 1

Как добавить дополнительный столбец при сопоставлении или как экспортировать определенную информацию столбца в третью таблицу?


Я использую оператор match and merge из sql. Он отлично работает между 2 столами, для чего и был изначально разработан. Тем не менее, я ищу, чтобы вставить данные при сопоставлении с третьей, возможно, 4-й таблицей.

Вот инструкция merge:

Merge into [table1] as T using [table2] as S on T.Last_name = S.Last_name and T.First_name = S.First_name
When matched then update set T.Last_name = S.Last_name, T.First_name = S.First_name;


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

Что я уже пробовал:

Я пытался добавить еще один при совпадении, но он ничего не делает. Имейте в виду, что этот код находится в сочетании с vb.net код, который я запускаю.

1 Ответов

Рейтинг:
2

Member 13896879

Вы можете использовать предложение output из инструкции merge во временную таблицу, а затем отфильтровать результаты и добавить их в третью таблицу.

Пример вывода слияния

-----Inserting data when no match found.
MERGE [dbo].[Department_Target] AS tar
USING [dbo].[Department_Source] AS src
ON tar.[DepartmentID] = src.[DepartmentID]
WHEN NOT MATCHED THEN
   INSERT
   (
      [DepartmentID],
      [Name],
      [GroupName],
      [ModifiedDate]
   )
   VALUES
   (
      src.[DepartmentID], src.[Name], src.[GroupName], src.[ModifiedDate]
   )
OUTPUT
   $action,
   inserted.*,
   deleted.*;


Member 11856456

Я вижу, что код использует исходную информацию для вставки, но куда она отправляется для вывода? Могу ли я указать таблицу для out put и могу ли я сделать это в операторе when matched?

Member 13896879

Выходными данными инструкции merge будут строки, которые были вставлены или удалены. Способ обновления или для этих целей совпадения будет заключаться в удалении строки, а затем вставке той же строки с обновленным значением, поддерживающим значения первичного ключа. Также стоит отметить, что $action будет обозначать, какое действие было предпринято над строкой sop INSERT, UPDATE или DELETE.

Ниже приведена дополнительная информация о столбце $action. Надеюсь, это поможет вам просеять результаты, чтобы вы могли зафиксировать их в своей третьей таблице

$действие
Доступен только для оператора MERGE. Указывает столбец типа nvarchar(10) в предложении OUTPUT инструкции MERGE, который возвращает одно из трех значений для каждой строки: "INSERT", "UPDATE" или "DELETE" в соответствии с действием, выполненным над этой строкой.