【发布时间】:2023-04-07 12:33:01
【问题描述】:
我有一个 Table1:
IdT1 : 11, 12, 13
IdT1Group : 30,30,30
表2:
IdT2 : 1, 2, 3, 4
IdT1 : 11, 11, 12, 12
Detail : A, B, A, B
AND 用户定义的表类型@T2:
IdT2 : 1, 2, 3
IdT1 : 11,11,11
Detail: A,B,C
我想将 Table2 更新为:
IdT2 : 1,2,5, 3,4,6, 7,8,9
IdT1 : 11,11,11, 12,12,12, 13,13,13
Detail : A,B,C, A,B,C, A,B,C
所以,我是在 StoredProcedure 中使用合并:
;WITH Table2
AS (SELECT Table2.* FROM Table2 INNER JOIN Table1 ON Table2.IdT1 = Table1.IdT1 AND IdT1Group = 30)
MERGE INTO Table2 AS tblTarget
USING (SELECT @T2.*, T1Item.IdT1 AS T1Id FROM @T2 CROSS JOIN Table1 where IdT1Group = 30)
AS tblSource
ON tblTarget.IdT1 = tblSource.T1Id And tblTarget.IdT2 = tblSource.IdT2
WHEN MATCHED THEN
UPDATE
SET Detail = tblSource.Detail
WHEN NOT MATCHED BY SOURCE THEN
DELETE
WHEN NOT MATCHED BY TARGET THEN
INSERT (IdItem, IdT2, Detail)
VALUES (tblSource.IdT1,
tblSource.IdT2, tblSource.Detail);
但是在我尝试了我的代码之后,我的 table2 变成了:
IdT2 : 1,2,5, 6,7,8, 9,10,11
IdT1 : 11,11,11, 12,12,12, 13,13,13
Detail: A,B,C, A,B,C, A,B,C
应该是这样的:
IdT2 : 1,2,5, 3,4,6, 7,8,9
IdT1 : 11,11,11, 12,12,12, 13,13,13
Detail : A,B,C, A,B,C, A,B,C
【问题讨论】:
-
请花一些时间重新格式化您的示例数据/表格。
-
您对表和数据的描述非常混乱。而且我不知道为什么你会期望从合并中得到你所期望的。
标签: sql sql-server stored-procedures merge cross-join