我有一个应用程序填充表,它安静了几列。我正在设置表中数据更改的审计跟踪,我的初始设置是设置触发器,但是当数据更新时,它一次更新1列,每个帐户每次更新创建40行(示例只)。
我希望编写一个检查更改的存储过程,给定理想情况下列的数量要将所有列连接成一个字符串,然后将其与自身进行比较以进行更改并创建新记录(如果有)。但是这样做动态,所以我不必为每列都select col1,' + ' col2,' + ' col3,' + 'col4 from table
。
我已经获得了获取列名称的代码,但是我仍然坚持如何使用相关的SELECT
进入OR
语句。使用2个表,源表和审计表进行比较。
DECLARE @s VARCHAR(500)
SELECT @s = ISNULL(@s+', ','') + c.name
FROM sys.all_columns c join sys.tables t
ON c.object_id = t.object_id
WHERE t.name = 'table1'
SELECT @s
所以期望的输出是(基于@s是连接列)
SELECT @s, AccountRef
FROM table1_Source as t1 INNER JOIN
table2_Audit as t2 ON t1.AccountRef = t2.AccountRef
WHERE t1.AccountRef = t2.AccountRef
AND t1.@s <> t2.@s