我的问题的症结是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子句中的'和'后面是什么?或者,也许你可以解释触发器应该处理什么样的业务规则?这可能会阐明为什么这些陈述是你看到他们的方式(可能有助于解释他们的工作方式)。 –