[英]Postgres SQL trigger to update TableA.column with NEW value AFTER INSERT OR UPDATE on TableB
[英]Write a trigger to update the columnB in TableB when the ColumnA in TableA are updated based on the common column in both the tables
CREATE TABLE [dbo].[USERS]
(
[USER_NAME] [nvarchar](64) NOT NULL,
[EMAIL_ADDRESS] [nvarchar](256) NULL,
[REGISTERED_DATE] [datetime] NOT NULL,
[FULL_NAME] [nvarchar](256) NOT NULL,
[MANAGER] [nvarchar](64) NULL,
[DEPARTMENT] [nvarchar](256) NULL,
[TITLE] [nvarchar](64) NULL,
PRIMARY KEY CLUSTERED ([USER_NAME] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
这是我的表,我希望在更新管理器列时触发触发器,并且必须根据USER_NAME
列在另一个表上更新相同的管理值。
我尝试了下面的触发器,但它不起作用。
Create TRIGGER [dbo].[UpdateManager]
ON [dbo].[USERS]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
declare @USER_NAME as nvarchar
declare @MANAGER as nvarchar
if(update(MANAGER))
begin
select @USER_NAME = USER_NAME from deleted
select @manager = Manager from deleted
update [dbo].[USERS_TEST] set MANAGER=@MANAGER where USER_NAME= @USER_NAME
end
END
您的触发器中有两个主要问题:
deleted
可以有多行,您没有考虑到这一点。nvarchar
没有长度; 在这种情况下,默认长度为 1。我怀疑您想要的查询是:
update ut
set MANAGER = d.MANAGER
from [dbo].[USERS_TEST] ut join
deleted d
on ut.USER_NAME = d.USER_NAME ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.