我能够找到表格触发器中更新的列。然而触发器有点大,我想尽可能减小它的大小。所以现在,我想创建一个通用存储过程,并从存储过程中找出更新的列。
以下是查找更新列的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
有人可以帮助我解决我为实现目标而应该做些什么
答案 0 :(得分:0)
如果你想创建一个可以随时执行的sp,看看自上次运行sp以来在数据库范围内更新了什么,那么我认为不能这样做。我建议要么使用内置的sql server 2008审计功能,要么使用Yuriy Galanter已经指出的触发器。