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
Microsoft SQL Server触发器使用另一个表列的更改更新表行_Sql_Sql Server_Triggers - Fatal编程技术网

Microsoft SQL Server触发器使用另一个表列的更改更新表行

Microsoft SQL Server触发器使用另一个表列的更改更新表行,sql,sql-server,triggers,Sql,Sql Server,Triggers,我有两个表zipTbl和locationTBl,有四个公共列 zipCode City stateCode salesTaxRate 如果zipCode在locationTbl中从'91311'更改为'10172',我希望city,stateCode,saletaxrate中的zipTbl用zipTbl中相同的值更新,其中zipCode是新的值'10172' zipCode是zipTbl的主键,也是位置tbl中的外键 我使用以下命令创建触发器,但它仅从zipTBL中的第一行更新,而不是从带有新

我有两个表
zipTbl
locationTBl
,有四个公共列

zipCode
City
stateCode
salesTaxRate
如果
zipCode
locationTbl
中从'91311'更改为'10172',我希望
city
stateCode
saletaxrate
中的
zipTbl
zipTbl
中相同的值更新,其中
zipCode
是新的值'10172'

zipCode
zipTbl
的主键,也是
位置tbl
中的外键

我使用以下命令创建触发器,但它仅从
zipTBL
中的第一行更新,而不是从带有新
zipCode的行更新

CREATE TRIGGER trg_update_city_state on dbo.locationTbl
AFTER Update
AS 
BEGIN
     UPDATE locationTbl
     SET locationTbl.city = zipTbl.city,
         LocationTbl.stateCode = zipTbl.stateCode,
         locationTbl.salesTaxRate = zipTbl.salesTaxRate 
     FROM zipTbl
END 

我已经尝试了几种添加“where locationTbl.zipCode=zipTbl.zipCode”的组合,但我一直遇到语法错误,您是否尝试过类似的方法

CREATE TRIGGER trg_update_city_state on dbo.locationTbl AFTER Update 
AS 
BEGIN 
  UPDATE locationTbl 
  SET locationTbl.city = INSERTED.city, 
  LocationTbl.stateCode = INSERTED.stateCode, 
  locationTbl.salesTaxRate = INSERTED.salesTaxRate 
  FROM INSERTED
  WHERE locationTbl.zipCode = INSERTED.zipcode

我想是这样的:

UPDATE locationTbl
SET locationTbl.city=zipTbl.city,
    LocationTbl.stateCode=zipTbl.stateCode,
    locationTbl.salesTaxRate=zipTbl.salesTaxRate
FROM locationTbl t1
JOIN inserted i
  ON t1.zipCode=i.zipCode
JOIN zipTbl
  ON i.zipCode=zipTbl.zipCode

您需要在locationTbl和INSERTED之间建立连接。如前所述,这不起作用。这是zipCode更改的位置TBL,我想从zipCodeTbl更新位置TBL中的城市、州、税率