微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查找引用不存在的表列的SQL对象

如何解决查找引用不存在的表列的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 举报,一经查实,本站将立刻删除。