方案:两个数据库位于同一服务器中。 SRC DB和TGT DB。两个表具有相同的20个具有相同列名的表。如果今天的SRC和TGT DB相等,并且明天SRC中很少的列值被更新。我怎样才能动态地使用sql server捕获这些改变的列名。 我使用的逻辑如下,但它是每个表的硬编码解决方案。我希望它是动态的。在SQL Server 2008中动态捕获更改的列名称
CODE
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列,well.They变化从桌到桌。
一种方法是合并[信息模式](https://msdn.microsoft.com/en-GB /library/ms186778.aspx)与[动态sql](https://msdn.microsoft.com/en-us/library/ms709342%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)。 –
你可以尝试在SQL Server 2008中更改跟踪https://technet.microsoft.com/en-us/library/cc280462(v=sql.105).aspx –
@KannanKandasamy是的,我尝试使用信息架构..但我是无法动态实现它。 –