从存储过程中查找更新的列

时间:2013-09-17 12:48:42

标签: sql-server tsql stored-procedures

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

以下是查找更新列的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 

有人可以帮助我解决我为实现目标而应该做些什么

1 个答案:

答案 0 :(得分:0)

如果你想创建一个可以随时执行的sp,看看自上次运行sp以来在数据库范围内更新了什么,那么我认为不能这样做。我建议要么使用内置的sql server 2008审计功能,要么使用Yuriy Galanter已经指出的触发器。