gpt4 book ai didi

sql-server - SQL 服务器 : using MERGE statement to update two tables

转载 作者:行者123 更新时间:2023-12-02 09:16:43 25 4
gpt4 key购买 nike

我正在尝试使用 MERGE 语句通过单一来源 (CTE) 更新 2 个表。当我只使用 1 个合并时它有效,但是当我添加第 2 个时,它返回一个错误:

Msg 208, Level 16, State 1, Procedure mn_SeoUrl_UpdateBulk, Line 46
Invalid object name '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;

最佳答案

Is it possible to update 2 tables with a merge?

不,不可能通过一次合并更新两个表。您必须执行两个单独的合并语句。

正如其他人在评论中指出的那样,单个 CTE 只能用于一个语句,因此如果您执行两个合并语句,它们不能共享同一个 CTE。我的建议是使用您的 CTE 查询来填充表变量。然后您可以在两个合并语句中使用相同的表变量。

关于sql-server - SQL 服务器 : using MERGE statement to update two tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com