Mud*_*san 5 sql sql-server triggers sql-server-2005
如何创建触发器以在列中插入值,该列与表中新插入的行的同一表的另一列的值相同.
假设我有如下表格
ColumnA | ColumnB
Run Code Online (Sandbox Code Playgroud)
我希望一旦将行插入到表中或将columnB值更新,就将columnB值插入ColumnA.但它不应该相反,即将columnA值插入columnB
.下面的代码只处理INSERT,请帮助我如何同时处理插入和更新用时columnB值被插入或更新表即.
CREATE TRIGGER inserupdate
ON triggertestTable
AFTER INSERT,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
declare @value int
select @value=columnB from inserted
update triggertestTable
set columnA=@value
END
GO
Run Code Online (Sandbox Code Playgroud)
如果插入的值如下所示,这可以正常工作
insert into triggertestTable(columnB) values('xyz')
Run Code Online (Sandbox Code Playgroud)
ColumnB值插入columnA
ColumnA | ColumnB
xyz | xyz
Run Code Online (Sandbox Code Playgroud)
但是如果某个其他应用程序在columnA中插入值,则null值会更新
insert into triggertestTable(columnA) values('pqr')
Run Code Online (Sandbox Code Playgroud)
现在的记录是
ColumnA | ColumnB
xyz | xyz
NULL | NULL
Run Code Online (Sandbox Code Playgroud)
正确的记录集应如下所示
ColumnA | ColumnB
xyz | xyz
pqr | NULL
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题呢.
Bog*_*ean 10
尝试此触发器(当将值插入ColumnB或从ColumbB更新值时,它会将值从ColumnB复制到ColumnA):
CREATE TRIGGER trgIU_triggertestTable_UpdateColumnAWhenColumnB
ON dbo.triggertestTable
AFTER INSERT,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
IF UPDATE(ColumnB)
BEGIN
UPDATE dbo.triggertestTable
SET ColumnA=i.ColumnB
FROM inserted i
INNER JOIN dbo.triggertestTable t ON i.MyID=t.MyID
LEFT JOIN deleted d ON i.MyID=d.MyID
WHERE d.MyID IS NULL AND i.ColumnB IS NOT NULL -- Row was inserted
OR d.MyID IS NOT NULL -- Row was updated
END
END
GO
Run Code Online (Sandbox Code Playgroud)
我用这个表:
CREATE TABLE dbo.triggertestTable(
MyID INT IDENTITY(1,1) PRIMARY KEY, -- MyID should be a PRIMARY KEY or a mandatory(NOT NULL) UNIQUE constraint
ColumnA VARCHAR(100),
ColumnB VARCHAR(100)
);
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48160 次 |
| 最近记录: |