Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 带表别名的T-SQL Update语句WHERE子句_Sql Server_Tsql_Triggers - Fatal编程技术网

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
条件中使用表别名。

为什么,您要这样做?为什么要对数据进行非规范化?为什么要复制数据。看一看。我们为两类客户提供服务,公司和个人。当它是一个个人时,仍然有一个候选记录,因此我们有一个触发器,如果候选名称被更新,它将更新客户联系人名称,反之亦然。我不想通过提供所有的上下文来让问题复杂化,这可能还不够。我们已经运行了基于触发器的审计,所以如果需要的话,我们可以随时回溯更改。谢谢你,我一直很困惑!谢谢你的澄清