我一直在 VS2013 中使用 SSDT,到目前为止发现,当存储过程引用不存在的列时,构建会失败。
今天我成功构建了一个项目,但发现发布失败。该错误是标准的“权限具有对对象 [表].[列] 的未解析引用”。我知道这是由于存储过程寻找不再存在的列所致。
我的问题是为什么构建首先成功,因为这肯定是失败应该发生的地方。是否有一个配置选项可以在构建级别控制此行为?
最佳答案
这里有两种表现不同的场景。
场景 1:引用数据库项目中定义的表中不存在的列的存储过程将产生错误并阻止构建成功。
场景 2:引用数据库项目中未定义的表的存储过程将产生警告,但不会阻止构建成功。
场景 2 是更有趣的一种,因为当您尝试发布项目时,发布可能会成功或失败,具体取决于目标数据库中的内容以及您配置部署设置的方式。例如,假设:
- 您的存储过程包含对 dbo.SomeTable.Column1 的引用
- 您的数据库项目不包含 dbo.SomeTable 的定义
在这种情况下,如果目标数据库不包含 dbo.SomeTable,部署就会成功,因为 SQL Server 允许过程引用不存在的表(一种称为延迟名称解析的功能)。
但假设目标数据库确实包含 dbo.SomeTable。如果目标数据库上的 dbo.SomeTable 实际上有一个名为 Column1 的列,则部署将成功。但如果目标数据库上的 dbo.SomeTable 没有名为 Column1 的列,则部署将会失败。
不清楚您遇到的是哪种情况。如果它更像场景 1,其中您对数据库项目中定义的表有无效引用,但由于某种原因 SSDT 没有产生错误,那么这是一个错误,最好记录一个 Connect 问题为此,请访问 https://connect.microsoft.com/SQLServer/feedback/CreateFeedback.aspx使用“开发者工具(SSDT、BIDS 等)”类别。
关于visual-studio-2013 - 发布时出现 SSDT 错误,但构建时未出现 SSDT 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33572074/