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中的城市、州、税率