积极答复者
最近一个需求,验证数据库对象的正确性?

问题
-
需求:把一个名为A的库,复制为B,方法有多种,这次,选用的方法是:导入导出,在SQL SERVER之间复制对象和数据。然而,A库已经创建了有5年之久,当中的一些数据库对象存在一些错误,当时的开发设计人员并没有处理,比如表中的字段被删除,视图,函数,存储过程又没有修改,又重新建了这些对象,被抛弃的旧脚本又没删除,所以呢,在复制的过程中,不断报错,比如,字段名无效啊,字段名不明确啊,
由于数据库文件有1G多,所以每次耗费时间长,报错之后去找这些对象,然后修复,这个过程,我发现好像没有尽头,因为他不是一次性报错,导入一次之后,报错,修复,报错,修复,...就是这个循环,搞了3次之后,我觉得这样不行了,必须要通过写脚本验证,找到当前库中所有有问题的视图,函数,存储过程,
不知可有这样的脚本返回所有有问题的数据库对象,这样可以批量修改到位。
答案
-
Try find them with sp_depends and query sys.sql_dependencies. If you need to copy whole db regularly, better to do backup/restore. Much quicker and easier.
- 已标记为答案 Lisa Zhang - MSFTModerator 2013年8月29日 15:31
-
自己写个小程序很容易做到嘛, 分成两步做, 第一步是同步结构, 这个步骤就是创建表, 视图, 存储过程什么的, 出错的对象记录下来, 处理完一次之后, 对于出错的对象再次重建(避免有依赖的对象没有先创建而导致的正常错误), 这个重试的步骤可以进行多次, 比如10次, 最后把还是会出错的对象记录下来人工再判断一次, 这个时候一般都是比较少的了
结构师叔成功后, 数据同步就很容易了
- 已标记为答案 Lisa Zhang - MSFTModerator 2013年8月29日 15:32
全部回复
-
Try find them with sp_depends and query sys.sql_dependencies. If you need to copy whole db regularly, better to do backup/restore. Much quicker and easier.
- 已标记为答案 Lisa Zhang - MSFTModerator 2013年8月29日 15:31
-
自己写个小程序很容易做到嘛, 分成两步做, 第一步是同步结构, 这个步骤就是创建表, 视图, 存储过程什么的, 出错的对象记录下来, 处理完一次之后, 对于出错的对象再次重建(避免有依赖的对象没有先创建而导致的正常错误), 这个重试的步骤可以进行多次, 比如10次, 最后把还是会出错的对象记录下来人工再判断一次, 这个时候一般都是比较少的了
结构师叔成功后, 数据同步就很容易了
- 已标记为答案 Lisa Zhang - MSFTModerator 2013年8月29日 15:32
-
又报了两个视图错误,对象不存在,可我去A库中查询视图,都没有问题,查看所有者为dbo,检查视图中引用的表的所有者都是dbo,
只是有一点,在实例上右键A库,看到是所有者是server\administrator 而B的所有者是 sa,
难道说是架构问题?在连接源时,设置了用windows登陆也不行。
原本想用一用这个功能的,没想到这么曲折复杂,还不如copy--还原来的快。
- 已编辑 fangyanqin 2013年8月24日 3:39
-
又报了两个视图错误,对象不存在,可我去A库中查询视图,都没有问题,查看所有者为dbo,检查视图中引用的表的所有者都是dbo,
只是有一点,在实例上右键A库,看到是所有者是server\administrator 而B的所有者是 sa,
难道说是架构问题?在连接源时,设置了用windows登陆也不行。
原本想用一用这个功能的,没想到这么曲折复杂,还不如copy--还原来的快。