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

Sql server 从存储过程中查找更新的列,sql-server,tsql,stored-procedures,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_Upda

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

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

如果您想创建一个可以随时执行的sp,并查看自上次运行该sp以来在数据库范围内更新了哪些内容,那么我认为这是不可能做到的。我建议要么使用内置的SQLServer2008审计功能,要么像YuriyGalanter已经指出的那样使用触发器

@marc_s我不知道你的问题是否正确。但我使用的是sql server。如果我查错了,请原谅我,我已经查过了,但帮不了我。我正在寻找一个通用的商店程序来审核所有大写字母的表格。