这是有效的 SQL Server 更新语法吗?

Faj*_*iya 4 sql-server syntax t-sql update

今天我正在阅读一些很久以前做的数据库笔记。我看到了这个查询:

UPDATE Sales.Orders
SET (shipcountry, shipregion, shipcity)=
(SELECT country, region, city
FROM Sales.Customers AS C
WHERE C.custid =Sales.Orders.custid)
WHERE custid IN
(SELECT custid FROM Sales.Customers WHERE country = 'USA');
Run Code Online (Sandbox Code Playgroud)

我对这个语法真的很陌生。但我的注释说它是“有效的 SQL Server 更新语法”。这是真的?SSMS 无法解析它。当我尝试运行它时,我得到了这个:

在此输入图像描述

另外,SQL Server 的UPDATE文档似乎建议在关键字(之后不允许使用SET。无论如何,我只是想确认一下。

ype*_*eᵀᴹ 8

语法:

...
SET (shipcountry, shipregion, shipcity) =
    ( SELECT country, region, city 
      ...
    )
...
Run Code Online (Sandbox Code Playgroud)

有效的SQL语法,但不是有效的 SQL Server 语法。它尚未在任何版本中实现。

(expression1, expression2, ...)被称为“行构造函数”,它可以在各种地方使用,例如在WHERE / WHEN / HAVING条件中、在UPDATE .. SET(作为您的问题)、在VALUES (...)语法中(通常在INSERT语句中使用)。在 SQL Server 中,仅允许在第三种情况 (VALUES) 中使用,该情况在版本 2008 中实现。

其他 DBMS(Postgres、Oracle、DB2)已全部或部分实现了此语法。