【问题标题】:Dynamically Capture Changed Column Name in SQL Server 2008在 SQL Server 2008 中动态捕获更改的列名
【发布时间】: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 列。它们因桌子而异。

【问题讨论】:

标签: sql-server dynamic-sql


【解决方案1】:

为什么不使用 ddl 触发器。看看这个article 它可以跟踪服务器或数据库中数据定义的任何变化

【讨论】:

  • 触发器我们必须单独申请所有表,所以当发生任何变化时,列会自动被拾取,但是如果明天一个新表被添加到列表中怎么办?同样,我们必须为此添加触发器。但是,我想捕获所有 PK 列,并且应该有一个单独的列,其中应该包含更新的列名,我将存储在一些 TEMP 表中。最重要的是,我正在处理 TEMP 表,因此触发器不会那么有效。不过,我什至尝试过使用 Trigger。
  • 看看here我说的是数据库触发器而不是表触发器
猜你喜欢
  • 1970-01-01
  • 2013-07-22
  • 2017-04-30
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多