我正在尝试部署一个无错误构建的数据库项目 Operations 。部署失败,出现“无效的对象名称”错误。错误中的对象名称是另一个数据库项目 Company 中对象的三部分名称。该名称有效:该对象存在于 Company 中, Operations 项目中的 Company 项目中有一个数据库引用,以及部件名称出现在 Operations 项目的其他对象中,不会导致错误。
据我所知,错误的原因是三部分名称出现在使用COLLATE语句的连接中。例如
CREATE VIEW BranchDetails
AS
SELECT b.BranchID, bu.LocationID
FROM Branch b
INNER JOIN Company.dbo.BusinessUnit bu on b.BranchAbbreviation = bu.[Name] COLLATE SQL_Latin1_General_CP1_CI_AS;
需要COLLATE语句,因为这两个数据库具有不同的排序规则,并且无法在不转换一列或另一列的排序规则的情况下连接具有不同排序规则的列。
是否有一些解决方法可以让我在没有“无效对象名称”错误的情况下部署数据库?
编辑:看起来COLLATE语句可能是一个红色的鲱鱼。我用虚拟的替换了视图:
CREATE VIEW BranchDetails
AS
SELECT NULL AS BranchID, NULL AS LocationID;
然后处理其他错误,直到我能够部署数据库。然后,我将BranchDetails CREATE VIEW的原始文本复制回脚本,并且构建和部署数据库时没有错误。
我能想到的唯一解释是:
1)在复制视图文本然后再返回时,我以某种方式省略了导致错误的内容;
2)错误实际上与我用虚拟文本替换视图时修复的其他错误之一相关,并且Visual Studio向我提供了指向错误的.sql文件的错误错误消息。我想这是可能的,因为其他错误与我们的开发环境中不存在的存储过程中的四部分名称中包含的服务器名称有关。