繁体   English   中英

使用公共表表达式并执行多个更新命令

[英]USING Common Table Expression and perform multiple update commands

是否可以让 CTE 执行多个更新命令?

With Query AS
(
    SELECT
        Table_One.FOO AS FOO,
        Table_Two.BAR AS BAR
    FROM FOO
    JOIN BAR ON FOO.ID = BAR.ID
)
UPDATE
    Query.FOO = 1;
UPDATE
    Query.BAR = 2;

在示例中 Query 在第二个 UPDATE 命令中不再可用。

编辑:

我的工作代码如下所示:

With Query AS
(
    SELECT
        Table_One.FOO AS FOO,
        Table_Two.BAR AS BAR
    FROM FOO
    JOIN BAR ON FOO.ID = BAR.ID
)
UPDATE
    Query.FOO = 1

With Query AS
(
    SELECT
        Table_One.FOO AS FOO,
        Table_Two.BAR AS BAR
    FROM FOO
    JOIN BAR ON FOO.ID = BAR.ID
)
UPDATE
    Query.BAR = 2;

因为你不能用一个 UPDATE 命令更新两个表,所以我需要两个更新命令。 正确知道的问题是,如果我需要更改 CTE 中的 Select,我必须在代码中的两个位置进行更改。

SQL Server UPDATE仅允许您更新单个表。 正如文档中所埋藏的:

以下示例通过将视图指定为目标对象来更新表中的行。 视图定义引用了多个表,但是UPDATE语句成功了,因为它只引用了一个基础表中的列。 如果指定了两个表中的列,则UPDATE语句将失败。

尽管视图和 CTE 并不完全相同,但它们通常遵循相似的规则。 因此,这也在有关可更新视图的部分中进行了解释:

任何修改,包括UPDATEINSERTDELETE语句,都必须仅引用一个基表中的列。

您可以通过发出两个更新并将它们包装在单个事务中来有效地执行您想要的操作。

您可以将CTE结果插入@Table变量并在代码块中需要的任何位置使用此表。 (您可以join这个表与实际的表执行UPDATE/INSERT/DELETE等)。 您不能在多个语句中使用相同的 CTE,因为 CTE 只是后续语句的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM