更新记录是插入历史表而不是旧记录

moh*_*111 3 sql t-sql sql-server

我有两个表Test和TestHistory

CREATE TABLE [dbo].[TEST](
    [ID] [int] NULL,
    [Name] [varchar](10) NULL,
    [Status] [char](1) NULL,
    [CreatedDate] [datetime] NULL
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[Test_History](
    [ID] [int] NULL,
    [Name] [varchar](10) NULL,
    [Status] [char](1) NULL,
    [CreatedDate] [datetime] NULL
) ON [PRIMARY]

GO

INSERT INTO TEST ([ID],[Name],[Status],[CreatedDate])values (1,'Mohan','A',GETDATE())
Run Code Online (Sandbox Code Playgroud)

创建的触发器:

ALTER TRIGGER [dbo].[trg_Test] 
     ON [dbo].[TEST]
     FOR UPDATE 
     AS

     Declare @ID INT;
     Declare @Name varchar(10);
     Declare @Status CHAR(2);
     Declare @CreatedDate DATETIME;


     Select @ID = I.ID from INSERTED I
     Select @Name = I.Name from INSERTED I
     Select @Status = I.Status from INSERTED I
     Select @CreatedDate = I.CreatedDate from INSERTED I


     INSERT INTO [dbo].[Test_history]
           ([ID]
           ,[Name]
           ,[Status]
           ,[CreatedDate]
           )

          SELECT @ID,
                 @Name,
                 @Status,
                 GETDATE()

                    FROM INSERTED I

           WHERE @ID = [ID] 
Run Code Online (Sandbox Code Playgroud)

当我更新记录时

Update [TEST] SET Status = 'I'那么Status = 'A'应该插入旧记录, 但是我正在更新它的内容已经插入到Testhistory表而不是旧记录中我做错了以及如何插入旧值

就像我更新Status = 'I' 并在历史表Status = 'A'中插入

Kar*_*ger 6

你需要INSERTDELETEDINSERTED.

请参阅此处的示例了解DML触发器的SQL Server插入和删除表.