2015-03-25 43 views
0

我正在研究SQL UPDATE命令的各種效果。SQL UPDATE和FROM子句。如何知道哪個表正在更新?

在閱讀MSDN official definition,他們提到在兩個UPDATE和FROM子句在同一個表的更新的例子

即:

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 

很明顯的例子是更新從該SalesYTDSales.SalesPerson表,因爲相同的表在FROM子句中鏈接,但與ALIAS,sp鏈接。

這很簡單,但如果沒有別名呢?

即:

UPDATE Sales.SalesPerson 
    SET SalesYTD = SalesYTD + SubTotal 
    FROM Sales.SalesPerson 
... 

更新如何會知道哪些表(行)的情況下它的更新?我的問題特別是要知道它要更新的表的哪個「實例」,UPDATE語句中提到的那個或FROM子句中提到的那個「實例」?

任何關於上述MSDN的例子的澄清將不勝感激。

感謝

UPDATE 可能最初的例子已經被寫成這樣......?

UPDATE sp 
SET sp.SalesYTD = sp.SalesYTD + SubTotal 
FROM Sales.SalesPerson AS sp 
... 
+0

如果你沒有定義別名,那麼你必須使用'Sales.SalesPerson'而不是'SP' – 2015-03-25 04:44:14

+0

@NoDisplayName謝謝,但它已經這樣做了。 – Fandango68 2015-03-25 04:45:06

+0

第二個示例將更新SalesPerson表中的所有行,因爲您尚未指定任何where子句。根本不清楚SubTotal從哪裏來。 – 2015-03-25 04:54:20

回答

1

SQL始終更新UPDATE命令後指定的表/別名。更新FROM子句中定義的別名時,只有一個表。從

+0

正確。因此,無論是直接更新表還是別名(與FROM複合體中的另一個表相關),它總是由UPDATE類後的第一個對象定向。正確?如果是這樣,那麼你的答案是。謝謝 – Fandango68 2015-03-30 03:17:35

+1

是的。你說對了 – 2015-03-30 03:32:06

相關問題