1

我能够找出在表的触发器中更新的列。但是触发器有点大,我想尽可能地减小它的大小。所以现在,我想创建一个通用存储过程并从存储过程中找出更新的列。

这是找出更新列的 SQL 查询

SELECT  @idTable = T.id 
FROM    sysobjects P JOIN sysobjects T ON P.parent_obj = T.id 
WHERE   P.id = @@PROCID

---- Get COLUMNS_UPDATED if update
DECLARE @Columns_Updated VARCHAR(50)

SELECT @Columns_Updated = ISNULL(@Columns_Updated + ', ', '') + name 
FROM syscolumns 
WHERE id = @idTable
  AND CONVERT(VARBINARY,REVERSE(COLUMNS_UPDATED())) & POWER(CONVERT(BIGINT, 2), colorder - 1)  > 0 

有人可以帮助我了解我应该做些什么来实现我的目标

4

1 回答 1

0

如果您想创建一个可以随时执行的 sp,并查看自上次运行此 sp 以来数据库范围内的更新内容,那么我认为无法完成。我建议要么使用内置的 sql server 2008 审计功能,要么使用 Yuriy Galanter 已经指出的触发器。

于 2013-11-05T12:07:28.460 回答