我有一个触发器,可以在表更新期间找到更新的列和更新的列值。
通过使用它,我可以获得格式为“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'
实际运行触发器时。
答案 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