SQL Server 2008跟踪数据更改,触发器

时间:2012-06-27 11:23:31

标签: sql sql-server sql-server-2008 exception triggers

一些背景:我有一个普通的表和一个“归档”表。归档表包含普通表所拥有的每一行的记录,因此我们可以跟踪行更新和删除。这些表是相同的,除了具有少量额外字段(id,datetime,user,insert / update / delete)的归档表。标准表包含插入/更新/删除时的一个触发器。触发器将所有新行(插入或更新)复制到存档表中,并删除行(删除)。

有些列可以为空。在归档表中,所有字段都可以为空(除了'archivy'之外。

触发器没有开始尝试或结束尝试。它没有交易声明。任何意想不到的异常都会立即敲掉那个东西(四处阅读,troggers的爆发中止了我认为的批次)。

触发器包含

之类的语句
insert into archive.table(field1, field2, field3 etc) 
   select (field1, field2 etc)

但是,我很有意思的是,如果将任何新列添加到主表中,则即使未将新字段添加到存档表或“插入”语句中,也可以继续进行无错处理。我不确定使用'*'是一个好主意(场地位置,表现等)

如果main和trigger之间的列不匹配,我很想发生异常。 如果在

中遗漏了任何字段,我也很想发生异常
insert into archive.table (field1, field2, field3 etc ) 
  select (field1,field2 etc)'

我认为可能使用信息架构在这里很有用。

我还注意到,在触发器中,RAISERROR('blah blah', 17, 1)不会立即中止整个批处理/程序/事务。

那么,问题是 - 这是跟踪记录插入/更新/删除的最佳(或合理)方式吗?

如果对列发生任何更改,任何人都知道使触发器失败的方法吗?

如何让raiserror中止整个批次?

那不是要求太多!

谢谢大家。

0 个答案:

没有答案