0

我在 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 *而不是一一列出所有的字段名称?

4

2 回答 2

1

插入 [PersonH​​istory] ​​SELECT * FROM 已删除

如果列的顺序相同,这将起作用

通过改变选择状态以包含日期字段,可以在开头或结尾添加其他字段,例如:

INSERT
INTO    [PersonHistory]
SELECT *, getdate() FROM deleted

这里更大、更危险的风险是对一个表而不是另一个表进行更新,这可能导致此触发器出错。在我看来,这将比现场环境中缺少的领域更邪恶。

于 2013-06-24T23:18:13.150 回答
1
INSERT 
INTO [PersonHistory]
SELECT
*
FROM 
deleted
WHERE
inserted.[Common_Field]=deleted.[Common_Field]

但始终建议明确提及字段名称。

于 2013-06-25T04:22:24.373 回答