如何解决查找引用不存在的表列的SQL对象
我们有一个遗留应用程序及其数据库,该数据库具有7000多个对象,包括存储过程,视图,函数,同义词等。
现在我们正在实施 Azure DevOps ,因此,当我将 dacpac 文件导入数据库项目时,我会看到更多的未解决的错误 >。当我检查时,还有更多未使用的存储过程和视图正在引用现在不存在的表列。
如何找到引用无效列和表的对象?
解决方法
请检查this article,以使用sp_refreshsqlmodule
查找损坏的存储过程。
我不确定您是否可以自动找到所有内容。 SSDT抱怨不仅在对象损坏时还存在未解决的引用,而且如果它也使用3-4个部件名称(跨数据库引用),那么@Krzysztof提供的解决方案可能行不通或仅部分起作用。
您需要做什么:
- 在代码中找到所有3-4个零件对象
- 添加此代码所需的所有数据库作为参考
- 为每个对象创建同义词
- 在同义词中使用
[$(server_var)].[$(database_var)].schema.object
语法
这些步骤并不像看起来那样困难。您可以在所有文件中使用字符串替换来批量更改〜90%。例如,如果您正在使用来自另一个数据库-> DatabaseA的对象。因此,在代码中,可能对象名称只有有限的组合:
- DatabaseA..tableName
- DatabaseA.dbo.tableName
- DatabaseA.other_schema.tableName
- [数据库] .. tableName
- ...等等
如果将所有这些值替换为
dbo.tableName
,其中dbo.tableName
将是新的同义词,那么它应该起作用。
通常此过程最多需要1-2天。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。