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

2024-02-13

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

假设我有如下表

ColumnA | 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')

列值被插入到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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建触发器以将列值插入到同一表的其他列 SQL Server 2005 的相关文章

随机推荐