我的問題的癥結是UPDATE語句的觸發以下樣式:困惑的SQL Server觸發器,做一個UPDATE(奇怪的UPDATE語句格式)
update ActualTableName
set X=Y
from inserted
我還以爲這是一個語法錯誤...表「ActualTableName」沒有出現在「from」子句中。
所以......這只是某種時髦的自動別名「開卷」(即它知道「插入」是ActualTableName別名?這似乎是因爲稍後查詢的可能性不大(見下文)。
還是......有更多的東西......像查詢被擴展爲:
update ActualTableName
set X=Y
from ActualTableName
cross join inserted
這也變得有點陌生了更復雜的更新同時引用inserted和deleted表:
update ActualTableName
set [... some assignments ...]
from
inserted
left outer join deleted
on inserted.Id = deleted.Id
and inserted.SomeField > deleted.SomeField
where
inserted.Id <> ActualTableName.Id and
該查詢似乎在更新該ActualTableName不是插入表的一部分記錄......這使我認爲,實際的查詢是:
update ActualTableName
set [... some assignments ...]
from
ActualTableName
cross jon inserted
left outer join deleted
on inserted.Id = deleted.Id
and inserted.SomeField > deleted.SomeField
where
inserted.Id <> ActualTableName.Id and
的書在網上有點不透明的這個和這樣說:
如果被更新的對象是相同的對象FROM 子句和只有一個參照在所述對象FROM 子句,對象的別名可以是或者可以不是指定。如果被更新的對象 在FROM子句中出現多次,而且只有一個,則該對象的引用不得指定表別名。對FROM子句中的對象的所有其他引用必須包含一個對象別名 。
所以......任何人都可以提供清晰的事情是怎麼回事?
是否在你的問題的第一次更新有什麼條件?在「更復雜的UPDATE」'where子句中的'和'後面是什麼?或者,也許你可以解釋觸發器應該處理什麼樣的業務規則?這可能會闡明爲什麼這些陳述是你看到他們的方式(可能有助於解釋他們的工作方式)。 –