SQL Server:获取@Columns_Updated的值

时间:2016-12-29 04:34:35

标签: sql-server

我有一个触发器,可以在表更新期间找到更新的列和更新的列值。

通过使用它,我可以获得格式为“col1,col2”的更新列。更新的列用逗号分隔,这很好。

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

INSERT INTO Crm_Log 
    SELECT @Columns_Updated
--End of New Log

如果我已经知道更新的列名称,我想询问如何查找更新的列值,这意味着在UPDATE触发器中我有一个名为nvarchar的{​​{1}}变量。

如何找到col1和col2的更新值,并将结果放入@Columns_Updated = 'col1,col2'格式的另一个nvarchar变量@Columns_Updated_Value中(实际上我并不关心数据类型) )。

更新提供的代码:

'wteveritis,32452'

我收到错误

  

无效的对象名称'inserted'

实际运行触发器时。

1 个答案:

答案 0 :(得分:0)

为此使用魔术表。触发器内部执行此操作。

DECLARE @query nvarchar(max);
DECLARE @ParmDefinition nvarchar(500); 
SELECT * into #t FROM INSERTED
SET @query = 'SELECT @Columns_Updated=  CONCAT(' + REPLACE(@Columns_Updated,',',','','',') + ') from #t';
EXEC sp_executesql @query, @ParmDefinition=N' @Columns_Updated nvarchar(max) OUTPUT', @Columns_Updated = @Columns_Updated OUTPUT
SELECT @Columns_Updated 

INSERTED魔术表包含更新行的每列的所有更新值。将变量@Columns_Updated声明为nvarchar