SQL UPDATE 和 FROM 子句。如何知道哪个 table 正在更新?
SQL UPDATE and FROM clause. How to know which table is being updated?
我正在研究 SQL UPDATE 命令的各种效果。
在阅读 MSDN official definition 时,他们在 UPDATE 和 FROM 子句
中提到了相同 table 的更新示例
即:
USE AdventureWorks;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + SubTotal
FROM Sales.SalesPerson AS sp
JOIN Sales.SalesOrderHeader AS so
ON sp.SalesPersonID = so.SalesPersonID
AND so.OrderDate = (SELECT MAX(OrderDate)
FROM Sales.SalesOrderHeader
WHERE SalesPersonID =
sp.SalesPersonID);
GO
很明显,该示例是从 Sales.SalesPerson
table 更新 SalesYTD
,因为 FROM
子句中链接了相同的 table,但带有别名,sp
.
这很简单,但是如果它没有别名怎么办?
即:
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + SubTotal
FROM Sales.SalesPerson
...
UPDATE 如何知道它正在更新 table(行)的哪个实例?我的问题是具体要知道table中的哪一个"instance"要更新,是UPDATE语句中提到的还是FROM子句中提到的?
如能对 MSDN 中的上述示例进行任何说明,我们将不胜感激。
谢谢
更新
原来的例子能不能这样写...?
UPDATE sp
SET sp.SalesYTD = sp.SalesYTD + SubTotal
FROM Sales.SalesPerson AS sp
...
SQL 总是更新 UPDATE 命令后指定的 table/alias。更新FROM子句中定义的别名时,只有1个table。相同的table被选中更新为
我正在研究 SQL UPDATE 命令的各种效果。
在阅读 MSDN official definition 时,他们在 UPDATE 和 FROM 子句
中提到了相同 table 的更新示例即:
USE AdventureWorks;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + SubTotal
FROM Sales.SalesPerson AS sp
JOIN Sales.SalesOrderHeader AS so
ON sp.SalesPersonID = so.SalesPersonID
AND so.OrderDate = (SELECT MAX(OrderDate)
FROM Sales.SalesOrderHeader
WHERE SalesPersonID =
sp.SalesPersonID);
GO
很明显,该示例是从 Sales.SalesPerson
table 更新 SalesYTD
,因为 FROM
子句中链接了相同的 table,但带有别名,sp
.
这很简单,但是如果它没有别名怎么办?
即:
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + SubTotal
FROM Sales.SalesPerson
...
UPDATE 如何知道它正在更新 table(行)的哪个实例?我的问题是具体要知道table中的哪一个"instance"要更新,是UPDATE语句中提到的还是FROM子句中提到的?
如能对 MSDN 中的上述示例进行任何说明,我们将不胜感激。
谢谢
更新 原来的例子能不能这样写...?
UPDATE sp
SET sp.SalesYTD = sp.SalesYTD + SubTotal
FROM Sales.SalesPerson AS sp
...
SQL 总是更新 UPDATE 命令后指定的 table/alias。更新FROM子句中定义的别名时,只有1个table。相同的table被选中更新为