在插入触发器上从 table1 插入到 table2
Posted
技术标签:
【中文标题】在插入触发器上从 table1 插入到 table2【英文标题】:Insert from table1 to table2 on insert trigger 【发布时间】:2010-07-30 16:19:34 【问题描述】:我对 SQL 很陌生,所以请原谅我的无能。
我正在尝试编写一个触发器,在插入表 1 时,将该记录插入表 2。
表1是[rps_lab_dev].[dbo].[Lab_Employee_Time_Off]
表2是[dbo].[Lab_Employee_Time_Off_Detail]
CREATE TRIGGER updatetrig
ON [rps_lab_dev].[dbo].[Lab_Employee_Time_Off]
FOR INSERT
AS
...
我不确定从这里去哪里(如果这甚至是正确的,我现在没有要检查的 sql)。任何方向都将不胜感激。
【问题讨论】:
您使用的是什么关系型数据库?触发器语法因 Oracle、mysql 等而异。 嗨,欢迎来到 Stack Overflow。这是哪个数据库引擎? 我希望我知道如何像这个板上的许多其他人一样“闻”到 T-SQL / SQL Server 查询...... @sheepsimulator:方括号、dbo 和触发器 - 如果只有方括号,可能是 MS Access。 TSQL 可能是 Sybase,但这样的问题很少见…… 【参考方案1】:当您处于 INSERT 触发器中时,您会得到一组称为 INSERTED 的记录。您可以使用它来执行您想要的任何操作。
如果您处于 UPDATE 触发器中,那么您将获得两组数据 DELETED 和 INSERTED - 从逻辑上讲,其中 DELETED 是将被新 INSERTED 数据覆盖的旧数据。
在你的情况下,让我们在这里做几件事。首先,它是一个 INSERT 触发器,所以我们称之为它。然后让我们从 INSERTED 中获取数据(它将与您的传入数据具有相同的列名)并使用它插入到您的详细信息表中
CREATE TRIGGER Lab_Employee_Time_Off_InsertAction
ON [rps_lab_dev].[dbo].[Lab_Employee_Time_Off]
FOR INSERT
AS
INSERT INTO [dbo].[Lab_Employee_Time_Off_Detail] (Col01, Col02, Col03)
SELECT Col1, Col2, Col3
FROM Inserted
GO
http://msdn.microsoft.com/en-us/library/ms189799.aspx
【讨论】:
另一件值得一提的重要事情是,SQL Server 中的触发器每次插入操作一次,如果您插入一组记录,则必须能够处理。这段代码可以做到这一点,但我希望提出问题的人理解为什么要使用基于集合的逻辑,而不是尝试将事物设置为变量并使用 values 子句。此外,始终通过执行多行插入更新或删除来测试触发器。【参考方案2】:对于 SQL Server...
CREATE TRIGGER updatetrig
ON [rps_lab_dev].[dbo].[Lab_Employee_Time_Off]
FOR INSERT
AS
INSERT INTO [dbo].[Lab_Employee_Time_Off_Detail] (Column1, Column2, Column3)
SELECT Column1, Column2, Column3 FROM inserted
只需将 Column1、Column2 和 Column3 替换为您的列名即可。
【讨论】:
以上是关于在插入触发器上从 table1 插入到 table2的主要内容,如果未能解决你的问题,请参考以下文章