0
我有一個包含2個表SQL Server數據庫,這些表由一個ID字段加入如下:SQL服務器MERGE與內2源/目標表加入
Table 1
ID, Selection, Field1, Field2
Table 2
ID, Field3, Field4
這些表由外國接合鍵刪除約束級聯,以便如果表1中的字段被刪除,表2中與該ID匹配的所有字段也將被刪除(但你知道)
我有另一個存儲過程,通過選擇兩個表的字段:
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
我現在想通過做不強制執行完全刪除所有領域的重新插入,而是在執行合併這更精簡。
到目前爲止,我有Table1上的合併功能,但似乎無法獲得與Table2右邊的關係。
這是我到目前爲止有:
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
我已經使用從上面的答案,並從這種關係中的select語句傳遞的結果嘗試上面進入臨時表,但沒有成功。
有人可以幫我整理我的第二張表嗎?
編輯: 要求提供完整的代碼:
USE [MyDatabase]
GO
ALTER PROCEDURE [dbo].[MergeTables]
@Selection int,
@Table1Parameter udtt_1 READONLY,
@table2Parameter udtt_2 READONLY
AS
,那麼你在上面看到的合併聲明。
c#代碼只是使用數據表作爲參數執行非查詢。 C#代碼目前功能齊全。
你能提供完整的代碼嗎?像** @ table2Parameter **,** @ selectionParameter **等... – 2014-09-19 16:25:06
在過程中,您已經通過了 - ** @ Selection **並在合併語句中使用了 - ** @ selectionParameter **變量。這是對的嗎 ?? – 2014-09-19 16:51:56
woops,對不起,這是一個錯誤在這裏,它是相同的變量。較低代碼的名稱應該是'selectionParameter' – 2014-09-22 07:42:02