将数据插入另一个表时触发以更新带有时间戳的表
Posted
技术标签:
【中文标题】将数据插入另一个表时触发以更新带有时间戳的表【英文标题】: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
【问题讨论】:
您的触发器被定义为after update
,因此它不会在insert
上触发。为此,您需要after insert, update
Sql Server trigger insert values from new row into another table的可能重复
【参考方案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 语句调试触发器。 以上是关于将数据插入另一个表时触发以更新带有时间戳的表的主要内容,如果未能解决你的问题,请参考以下文章