Sql server 带表别名的T-SQL Update语句WHERE子句
好吧,我把自己弄糊涂了,所以我想澄清一下,假设我想在触发器内进行以下更新。触发器位于名为Sql server 带表别名的T-SQL Update语句WHERE子句,sql-server,tsql,triggers,Sql Server,Tsql,Triggers,好吧,我把自己弄糊涂了,所以我想澄清一下,假设我想在触发器内进行以下更新。触发器位于名为tblCustomers的表上: UPDATE tblContacts SET tblContacts.ContactName = I.ContactName FROM tblContacts cont INNER JOIN inserted I ON cont.customerID = I.customerID 这只会更新插入的和tblContacts之间的内部联接的记录,即在大多数情况下只更新一条记
tblCustomers
的表上:
UPDATE tblContacts
SET tblContacts.ContactName = I.ContactName
FROM tblContacts cont
INNER JOIN inserted I ON cont.customerID = I.customerID
这只会更新插入的和tblContacts
之间的内部联接的记录,即在大多数情况下只更新一条记录,还是需要包含WHERE
子句
另外,我是否可以在where
子句中使用别名(cont),还是需要使用tblContacts
对不起,我知道这很傻,但我越来越糊涂了!谢谢
这是否只会从插入的和tblContacts
之间的内部联接更新记录,即在大多数情况下仅更新一条记录
对。这可以是一行或多行(取决于导致触发器触发的语句实际执行的操作),但它只会更新作为插入的表的一部分的行
另外,我可以在where子句中使用别名(cont
),还是需要使用tblContacts
您绝对可以使用表别名!事实上,定义表别名时,必须使用它。如果cont.customerID=I.customerID
上定义了匹配的per ON子句,则更新查询将更新所有tblContacts.ContactName
值。因此,如果10行匹配,那么10个值(10行)将受到影响
同样,您可以在WHERE
条件中使用表别名。为什么,您要这样做?为什么要对数据进行非规范化?为什么要复制数据。看一看。我们为两类客户提供服务,公司和个人。当它是一个个人时,仍然有一个候选记录,因此我们有一个触发器,如果候选名称被更新,它将更新客户联系人名称,反之亦然。我不想通过提供所有的上下文来让问题复杂化,这可能还不够。我们已经运行了基于触发器的审计,所以如果需要的话,我们可以随时回溯更改。谢谢你,我一直很困惑!谢谢你的澄清