【问题标题】:Trigger to update a table with timestamp when data is inserted into another table将数据插入另一个表时触发以更新带有时间戳的表
【发布时间】:2018-11-28 03:55:12
【问题描述】:

我对触发器很陌生。在这里需要帮助。

我有两张桌子,[dbo].[Demand_Request][dbo].[Modified_Demand_Request]

CREATE TABLE [dbo].[Demand_Request] 
(
    [CASE_ID] [INT] NULL,
    [TE_PART_NUMBER] [NVARCHAR](50) NULL,
    [VALUE] [FLOAT] NULL,
    [DEMAND_DATE] [DATETIME] NULL
) 

CREATE TABLE [dbo].[Modified_Demand_Request] 
(
    [CASE_ID] [INT] NULL,
    [TE_PART_NUMBER] [NVARCHAR](50) NULL,
    [VALUE] [FLOAT] NULL,
    [DEMAND_DATE] [DATETIME] NULL,
    [Modified_On] [DATETIME] NULL
) 

当数据插入[dbo].[Demand_Request] 时,我想将相同的数据与时间戳一起添加到表[dbo].[Modified_Demand_Request] 中。

下面是我的触发器,但它不起作用:

CREATE TRIGGER [dbo].[Modified_Demand_Request1]
ON [dbo].[Demand_Request]
AFTER UPDATE
AS
     INSERT INTO [dbo].[Modified_Demand_Request] ([CASE_ID], [TE_PART_NUMBER],[VALUE], [DEMAND_DATE], [Modified_On])
         SELECT 
             [CASE_ID], [TE_PART_NUMBER], [VALUE],
             [DEMAND_DATE], GETDATE()
         FROM 
             INSERTED

【问题讨论】:

标签: sql-server triggers


【解决方案1】:

我想知道您是如何插入数据的。我尝试了与下面相同的方法(使用“FOR INSERT”触发器)并且能够获取 Modified_Demand_Request 表中的数据。

    insert into [Demand_Request] values(1,'Test',1.0,GETDATE())
    insert into [Demand_Request] values(2,'Test1',1.0,GETDATE())
    insert into [Demand_Request] values(3,'Test2',1.0,GETDATE())
    insert into [Demand_Request] values(14,'Test2',1.0,GETDATE())

【讨论】:

    【解决方案2】:

    试试这个FOR INSERT

    Create Trigger [dbo].[Modified_Demand_Request1]
       on [dbo].[Demand_Request]
       FOR INSERT
       AS
         Insert Into[dbo].[Modified_Demand_Request] ([CASE_ID],[TE_PART_NUMBER],[VALUE],[DEMAND_DATE],[Modified_On])
           SELECT [CASE_ID],[TE_PART_NUMBER],[VALUE],[DEMAND_DATE],GETDATE()
           FROM INSERTED
    

    用于演示REXTESTER

    额外参考:Firing Trigger for Bulk Insert

    【讨论】:

    • @parthaburagohain 我已经用演示链接更新了答案,我希望它能按预期工作,你能详细说明你的问题吗?
    • 嗨,当我尝试插入一行时,触发器起作用。但是当我为多行运行它时,它不起作用..如何使用批量插入来实现?
    • @parthaburagohain 插入多行时会发生什么?代码看起来是正确的,因为它是从包含所有插入行的 inserted 中选择的。
    • 当我尝试插入多行时,不会从基表中复制任何内容。
    • 嗯...可能需要进行一些调查...如果您从 SSMS 插入数据并从中找出发生了什么/没有发生什么,您可以使用 select 语句和 print 语句调试触发器。
    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 2021-12-18
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多