the*_*ote 2 t-sql sql-server merge stored-procedures
我正在尝试使用一个MERGE语句来使用单个源 (CTE) 更新 2 个表。当我只使用 1 个合并时它有效,但是当我添加第二个时,它返回一个错误:
消息 208,级别 16,状态 1,过程 mn_SeoUrl_UpdateBulk,第 46 行
无效的对象名称“ cte ”。
是否可以通过合并更新 2 个表?如果可能的话,我做错了,我希望有人可以告诉我这样做的正确方法是什么。
任何帮助深表感谢。
谢谢你。
这是我的失败代码(错误的列名):
WITH cte AS
(
SELECT
[u].[col1], [u].[col2], [u].[col3],
CASE
WHEN [u].[col1] LIKE 'L%'
THEN 'c/' + [u].[col2] + '/' + [u].[col3]
WHEN [u].[col1] LIKE 'M%'
THEN 'm/' + [u].[col2] + '/' + [u].[col3]
END [col4]
FROM
(SELECT
[st1].[col1], [st1].[col2], [st1].[col3]
FROM
[dbo].[sourcetable1] [st1]
INNER JOIN
[dbo].[sourcetable2] [st2] ON [st1].[ID] = [st2].[ID]
WHERE
[pd].[col2] <> 0) [u]
)
MERGE [dbo].[table1] AS [Target]
USING [cte] AS [Source] ON [Target].[ID] = [Source].[ID]
WHEN MATCHED THEN
UPDATE
SET [Target].[col] = [Source].[col]
WHEN NOT MATCHED BY TARGET THEN
INSERT ([col])
VALUES ([Source].[col]);
MERGE [dbo].[tabl2] AS [Target]
USING [cte] AS [Source] ON [Target].[id] = [Source].[id]
WHEN MATCHED THEN
UPDATE
SET [Target].[col] = [Source].[col]
WHEN NOT MATCHED BY TARGET THEN
INSERT ([col])
VALUES ([Source].[col]);
END;
Run Code Online (Sandbox Code Playgroud)
是否可以通过合并更新 2 个表?
不,不可能通过一次合并更新两个表。您必须执行两个单独的合并语句。
正如其他人在评论中指出的那样,单个 CTE 只能用于一个语句,因此如果您执行两个合并语句,则它们不能共享相同的 CTE。我的建议是使用您的 CTE 查询来填充表变量。然后您可以在两个合并语句中使用相同的表变量。
| 归档时间: |
|
| 查看次数: |
3268 次 |
| 最近记录: |