使用主键动态合并两个表

时间:2017-10-12 12:56:12

标签: sql-server

我正在尝试编写一个过程,我可以动态地合并多个staging + destination表,每个表都有不同的列名和主键。

有没有办法通过提取主键约束进行合并?

我设想做一个看起来像这样的动态SQL语句:

'MERGE
   ' + @DestinationTable + ' Dest
USING
   ' + @StagingTable ' Staging
ON
   ' + @JoinConditions + '
WHEN NOT MATCHED THEN
   INSERT INTO
      Dest
   SELECT
      *
   FROM
      Staging
WHEN MATCHED THEN
   UPDATE
      Dest
   SET
      ' + @UpdateStatement

@DestinationTable是一个带有表名的字符串参数,@StagingTable是相同的,@JoinConditions是一个格式为

的字符串
Staging.ColumnName = Dest.ColumnName
每个键列的

@UpdateStatement格式相同,但非键列除外。

它看起来不漂亮,但这是我预见它的工作方式。

1 个答案:

答案 0 :(得分:1)

生成MERGE语句是BI / DW空间的主要内容,因为它是一种常见的要求。

有些解决方案可以生成存储过程和/或合并语句some will also write the SSIS packages。那里

就此而言,我不打算在这里写一个解决方案。
我最后一次需要它时下载了

通过搜索"生成合并脚本sql server"

,您可以了解此要求的常见程度。

例如