【发布时间】:2017-03-06 11:47:06
【问题描述】:
场景:两个数据库位于同一服务器中。 SRC DB 和 TGT DB.Both 都有相同的 20 个表,列名相同。如果今天 SRC 和 TGT DB 相等,明天 SRC 中的少数列值会更新。如何使用 sql server 动态捕获那些更改的列名。 我使用的逻辑写在下面,但它是每个表的硬编码解决方案。我希望它是动态的。
代码
SELECT DISTINCT PK_COL_NAMES,
Result = CASE WHEN **a.COL1 != b.COL1 THEN ‘COL1,' ELSE '' END +
CASE WHEN a. COL2 != b. COL2 THEN 'COL2,' ELSE '' END +
CASE WHEN a. COLN != b. COLN THEN 'COLN,' ELSE '' END**
FROM #TEMP b
LEFT JOIN #TEMP a
ON a.PK_COL1=b.PK_COL1 AND
a.PK_COL2=b.PK_COL2
WHERE **a.COL1 != b.COL1 OR
a.COL2 != b.COL2 OR
a.COLN != b.COLN**
PKCOL --> 与表中的列名相同,但主要
PS:我的一张桌子也有大约 98 列。它们因桌子而异。
【问题讨论】:
-
一种方法是将information schema 中保存的记录与dynamic sql 合并。
-
您可以尝试 SQL Server 2008 中的更改跟踪technet.microsoft.com/en-us/library/cc280462(v=sql.105).aspx
-
@KannanKandasamy 是的,我尝试使用信息模式..但我无法动态实现它。
-
Reg:SQL Server 2008 中的更改跟踪。如何在 SQL CODE 中实现它。因为我从来没有用过。