当前位置: 代码迷 >> Sql Server >> TSQL - 请问数据库中对于表的比较操作
  详细解决方案

TSQL - 请问数据库中对于表的比较操作

热度:66   发布时间:2016-04-24 09:59:56.0
TSQL 高手请进 - 请教数据库中对于表的比较操作。
四个数据库:
DB_PROD
DB_OLD 

DB_TEMP (动态生成)
DB_CHANGE (动态生成)

需求用TSQL实现下列3个步骤:

1. 把数据库 DB_PROD 中指定的10个视图 的内容输入到另一个数据库 DB_TEMP  里面的十个表(Table),DB_TEMP 是动态建立的,DB_TEMP 的表和列也是根据 DB_PROD 的视图动态建立的,是一致的。

2. 输入DB_TEMP 完成后, 比较DB_TEMP 和 DB_OLD 的数据 (DB_OLD 是DB_TEMP前一天的数据库), 每个表里都有一列叫 “UpdateDate” 和一列叫 "ID", 在下列几种情况下,把DB_TEMP 的那一整行输入到 DB_CHANGE 里面对应的表 (DB_CHANGE 也是动态生成的,里面的表和列与DB_TEMP 一致):

    DB_TEMP.UpdateDate<> DB_OLD.UpdatedDate  //是更新的数据
    DB_TEMP.ID NOT IN DB_OLD.ID // 是新增数据
    DB_OLD.ID NOT IN DB_TEMP.ID // 是删除数据

3. 输入DB_CHANGE 完成后,删除DB_OLD, 把DB_TEMP重命名成为 DB_OLD.
------解决思路----------------------
如果是SQL2008及以上版本,应可用Change Tracking实现,
参考 http://msdn.microsoft.com/en-us/library/cc280462.aspx
------解决思路----------------------
应该可以用存储过程来完成的 动态生成的话用动态语句 结合系统表。
------解决思路----------------------
CDC就是整行的http://blog.csdn.net/dba_huangzj/article/details/8130448
------解决思路----------------------
都想复杂了,你定时生成快照再比较就行了
------解决思路----------------------
change tracking不同于CDC, 建议了解一下change tracking的功能.