通用MERGE的存储过程

时间:2012-11-29 20:59:10

标签: sql tsql stored-procedures merge sql-server-2008-r2

我在数据库中有一组10个表(DB1)。另一个数据库(DB2)中有10个表,在同一个SQL Server 2008 R2数据库服务器计算机上具有完全相同的模式。

DB1中的10个表经常使用数据进行更新。

我打算编写一个每天运行一次的存储过程,以便将DB1中的10个表与DB2同步。存储过程将使用MERGE语句。

现在,我的目标是尽可能地将其作为通用和参数化。也就是说,适应更多的表格......并适应不同的源和目标数据库名称。绝对不需要硬编码。

到目前为止,这是我的算法:

  1. 将数据库名称作为参数
  2. 在存储过程中进行第一次查询...导致从查找表中提供10个表的名称(可以是10,20或其他)
  3. 是否有一个通用的MERGE语句,可以为上面的每个表格执行同步(基于主键?)
  4. 这是我需要更多输入的地方。

    实现此存储过程的最佳方法是什么? SQL语法会有所帮助。

1 个答案:

答案 0 :(得分:2)

我必须做类似的事情,为此我使用带有“骨架”的字符串作为merge语句,然后我通过sys视图上的简单查询检索列和pks列表。

你可以做类似的事情来建立你的合并声明,这里是我现在写的一个草图作为一个例子(我知道这很可怕但是我不打算在这个时候写一些像样的东西,它应该给你一个提示:P)

SQLFiddle

然后你只需要使用通常的sp_executesql存储过程来执行它 顺便说一句,在用这种方式构建命令字符串时总要注意,它不是那么安全