【发布时间】:2013-07-25 12:04:51
【问题描述】:
如何创建触发器以在表中新插入的行的同一表的另一列的值相同的列中插入值。
假设我有如下表
ColumnA | ColumnB
我希望 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
如果像下面这样插入值,这可以正常工作
insert into triggertestTable(columnB) values('xyz')
ColumnB 值被插入到 columnA
ColumnA | ColumnB
xyz | xyz
但如果其他应用程序在 columnA 中插入值,则两者都会更新 null 值
insert into triggertestTable(columnA) values('pqr')
现在记录是
ColumnA | ColumnB
xyz | xyz
NULL | NULL
正确的记录集应该如下所示
ColumnA | ColumnB
xyz | xyz
pqr | NULL
如何解决这个问题。
【问题讨论】:
-
如果 ColumnB 得到更新,那么 (1) ColumnA 也应该更新,或者 (2) ColumnA 只有在 ColumnB 的旧值和新值不同时才应该更新?如果在两列(ColumnA 和 ColumbB)中都插入值会发生什么?
标签: sql sql-server sql-server-2005 triggers