gpt4 book ai didi

sql - 创建触发器以将列值插入到同一表的其他列 SQL Server 2005

转载 作者:行者123 更新时间:2023-12-02 22:19:59 25 4
gpt4 key购买 nike

如何创建触发器以在表中新插入行的同一表的另一列的值相同的列中插入值。

假设我有如下表

ColumnA | ColumnB

我希望在将行插入表中或更新ColumnB值后立即将ColumnB值插入到ColumnA中。但反之亦然,即将columnA 值插入columnB

.下面的代码仅处理插入,请帮助我如何处理表的插入和更新,即当插入或更新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

但是,如果其他应用程序在列 A 中插入值,则空值会在两者中更新

 insert into triggertestTable(columnA) values('pqr')

现在记录是

ColumnA | ColumnB
xyz | xyz
NULL | NULL

正确的记录集应该如下所示

  ColumnA   | ColumnB
xyz | xyz
pqr | NULL

如何解决这个问题。

最佳答案

尝试此触发器(当将值插入 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

我使用了这张表:

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

关于sql - 创建触发器以将列值插入到同一表的其他列 SQL Server 2005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17860683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com