UPDATE
第一部分的语法已记录如下
UPDATE
[ TOP ( expression ) [ PERCENT ] ]
{ { table_alias | <object> | rowset_function_limited
[ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
}
| @table_variable
}
和
<object>
定义为
<object> ::=
{
[ server_name . database_name . schema_name .
| database_name .[ schema_name ] .
| schema_name .
]
table_or_view_name}
此外,
表或视图名称
是要更新行的表或视图的名称。 table_or_view_name 引用的视图必须是可更新的,并且在该视图的 FROM 子句中恰好引用一个基表。有关可更新视图的详细信息,请参阅 CREATE VIEW (Transact-SQL)。
据我所知,上述内容均未提及 CTE。然而,在
UPDATE
之后立即引用 CTE 是完全有效的。 这个答案显示了这个有效的例子
;WITH T AS
( SELECT InvoiceNumber,
DocTotal,
SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal
FROM PEDI_InvoiceDetail
)
UPDATE T
SET DocTotal = NewDocTotal
请注意,
UPDATE
和对 CTE 的引用之间没有任何内容,甚至没有 FROM
。
我是否遗漏了文档中的某些内容,或者是否能够在
UPDATE
未记录的行为之后立即放置 CTE?
请注意,我不是在谈论更新中的
FROM
子句。我说的是 UPDATE FOO
,其中 FOO
是 CTE。文档中有使用 CTE 的示例,但它们都使用 FROM
子句。
请阅读 Microsoft 的语法约定以更好地了解如何翻译其文档:
[ ](括号)可选语法项。