У меня есть база данных сервера SQL, который содержит 2 таблицы, эти таблицы соединяются поле ID следующим образом:SQL сервер MERGE 2 источника/целевые таблицы с внутренним соединением
Table 1
ID, Selection, Field1, Field2
Table 2
ID, Field3, Field4
Таблицы соединены иностранцем ключ с каскадом на ограничение удаления, так что если поле в таблице 1 будет удалено, все поля в таблице 2, соответствующие идентификатору, также будут удалены (но вы знали это)
У меня есть еще одна хранимая процедура, которая вытаскивает необходимые полей по выбору для обеих таблиц:
SELECT [Table2].* FROM [Table2] INNER JOIN [Table1] ON [Table1].[ID] = [Table2].[ID] WHERE [Table1].Selection = @selectionParameter
Я хотел бы обновить эти таблицы из моей программы C#. Ранее я делал следующее:
DELETE FROM [Table1] WHERE Selection = @selectionParameter
INSERT INTO [Table1] SELECT * FROM @table1Parameter (user defined table type passed in from c#)
INSERT INTO [Table2] SELECT * FROM @table2Parameter
Теперь я хотел бы сделать это более обтекаемым, не заставляя полный удалить и повторно вставить все полей и вместо выполнения слияния.
До сих пор у меня есть функционирование слияния в таблице1, но, похоже, не получается получить связь с таблицей 2 справа.
Вот что я до сих пор:
MERGE INTO [Table1] AS target
USING @Table1Parameter AS source
ON target.ID = source.ID
AND target.Selection = @selectionParameter
WHEN NOT MATCHED BY TARGET
THEN INSERT (ID, Selection, Field1, Field2) VALUES (source.ID, etc)
WHEN NOT MATCHED BY SOURCE AND target.Selection = @selectionParameter
THEN DELETE;
Это очень похоже запрос на: SQL Server MERGE + Joining other tables
Я попытался с помощью ответа от выше и передачи результатов из соотношения оператора выбора выше в временную таблицу, но не имели успеха.
Может кто-нибудь помочь мне интегрировать мой второй стол в это?
редактировать: Попросил предоставить полный код:
USE [MyDatabase]
GO
ALTER PROCEDURE [dbo].[MergeTables]
@Selection int,
@Table1Parameter udtt_1 READONLY,
@table2Parameter udtt_2 READONLY
AS
то слияние заявление вы видите выше.
Код C# просто выполняет запрос без использования данных в качестве параметра. Код C# в настоящее время полностью работоспособен.
Можете ли вы предоставить полный код? как ** @ таблица2Parameter **, ** @ выборParameter ** и т. д. –
В процедуре, которую вы прошли, - ** @ Выбор ** и в заявлении о слиянии, которое вы использовали - ** @ selectionParameter **. Правильно ли это? –
woops, извините, что здесь была ошибка, это та же переменная. имя в нижнем коде должно быть «selectionParameter» –