发布时的SSDT错误,但不是构建

时间:2015-11-06 17:12:13

标签: visual-studio-2013 build sql-server-data-tools

我一直在使用SSDT和VS2013,到目前为止,当存储过程引用不存在的列时,构建失败。

今天我已经成功建立了一个项目,但发现发布失败了。错误是标准"权限有一个未解析的对象[table]的引用。[column]"。我知道这是由于存储过程正在寻找不再存在的列。

我的问题是为什么构建在第一时间是成功的,因为这肯定是失败应该发生的地方。是否有一个配置选项可以在构建级别控制此行为?

1 个答案:

答案 0 :(得分:2)

这里有两种情况表现不同。

方案1:引用数据库项目中定义的表中不存在的列的存储过程将产生错误并阻止构建成功。

方案2:引用未在数据库项目中定义的表的存储过程将产生警告,并且不会阻止构建成功。

方案2是更有趣的方法,因为当您尝试发布项目时,发布可能成功或失败,具体取决于目标数据库中的内容以及您如何配置部署设置。例如,假设:

  • 您的存储过程包含对dbo.SomeTable.Column1
  • 的引用
  • 您的数据库项目不包含dbo.SomeTable
  • 的定义

在这种情况下,如果目标数据库不包含dbo.SomeTable,则部署将成功,因为SQL Server允许过程引用不存在的表(称为延迟名称解析的功能)。

但是假设目标数据库确实包含dbo.SomeTable。如果目标数据库上的dbo.SomeTable实际上有一个名为Column1的列,则部署将成功。但是,如果目标数据库上的dbo.SomeTable没有名为Column1的列,则部署将失败。

目前尚不清楚您遇到过哪种情况。如果它更像是场景1,你对数据库项目中定义的表有一个无效的引用,但由于某种原因SSDT不会产生错误,那么这是一个错误,记录一个Connect问题会很好使用类别“开发人员工具(SSDT,BIDS等)”在https://connect.microsoft.com/SQLServer/feedback/CreateFeedback.aspx进行此操作。