【发布时间】:2013-08-22 15:33:47
【问题描述】:
如果TABLE A 有更新,有没有办法将记录插入TABLE B?
我不想使用触发器。
答案是我们可以使用OUTPUT 子句代替触发器:
USE AdventureWorks2012;
GO
IF OBJECT_ID('dbo.vw_ScrapReason','V') IS NOT NULL
DROP VIEW dbo.vw_ScrapReason;
GO
CREATE VIEW dbo.vw_ScrapReason
AS (SELECT ScrapReasonID, Name, ModifiedDate
FROM Production.ScrapReason);
GO
CREATE TRIGGER dbo.io_ScrapReason
ON dbo.vw_ScrapReason
INSTEAD OF INSERT
AS
BEGIN
--ScrapReasonID is not specified in the list of columns to be inserted
--because it is an IDENTITY column.
INSERT INTO Production.ScrapReason (Name, ModifiedDate)
OUTPUT INSERTED.ScrapReasonID, INSERTED.Name,
INSERTED.ModifiedDate
SELECT Name, getdate()
FROM inserted;
END
GO
INSERT vw_ScrapReason (ScrapReasonID, Name, ModifiedDate)
VALUES (99, N'My scrap reason','20030404');
GO
【问题讨论】:
-
如果某些行被更新,您想在表中自动插入行,但您不想使用触发器,这是您要问的吗?
-
看看OUTPUT
-
如果你不想使用触发器,你想做什么来触发?
-
@Kumar,是的,可以通过触发器来完成......
-
如果您可以更改
UPDATE查询,那么您可以使用@bummi 提到的OUTPUT子句。如果你不能,那么你至少需要在你的选项中考虑触发器。你为什么不想使用它们?为什么在您的问题中有触发器的开头?
标签: sql sql-server tsql triggers sql-server-2008-r2