我在SQL Server中有两个表:
每当有人更新Person
表时,我都会运行此触发器将记录存储在PersonHistory
表中:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [TU_Person]
ON [Person]
AFTER UPDATE
AS
SET NOCOUNT ON
INSERT
INTO [PersonHistory]
([Field1], [Field2],[Field3],[Field4],[Field5],[Field6], [LastUpdated], [LastUpdatedBy])
SELECT [Field1], [Field2],[Field3],[Field4],[Field5],[Field6], [LastUpdated], [LastUpdatedBy]
FROM deleted
问题是我不断向此表添加字段,忘记将字段添加到此触发器。无论如何重写此触发器只是说insert *
和Select *
而不是逐个列出所有字段名称?
答案 0 :(得分:1)
INSERT INTO [PersonHistory] SELECT * FROM deleted
如果列的顺序相同,则可以使用
可以在开头或结尾添加其他字段,方法是选择状态更改以包含日期字段,例如:
INSERT
INTO [PersonHistory]
SELECT *, getdate() FROM deleted
这里更大,更危险的风险是对一个表而不是另一个表进行更新,可能导致此触发器出错。在我看来,这将是一个比现场环境中缺少的领域更大的邪恶。
答案 1 :(得分:1)
INSERT
INTO [PersonHistory]
SELECT
*
FROM
deleted
WHERE
inserted.[Common_Field]=deleted.[Common_Field]
但始终建议明确提及字段名称。