1

我正在将数据库模型转换为 SQLModel,以便我们可以开始使用 dacpac 进行部署。我已经用其他一些数据库完成了这项工作,但没有一个引用外部数据库。我有一个问题,即几个视图和存储过程引用来自同一服务器上不同数据库的表。对于存储过程没有错误,因为过程不需要在运行时创建表。但是对于我得到构建错误的视图

包含对对象的未解析引用。对象不存在或引用不明确

我一直在尝试找出一种方法来使其工作,而不必拥有第二个具有适当字段的项目或引用不同的 dacpac。我的同事建议尝试使用同义词,但这也没有解决问题。

任何帮助将不胜感激。

4

2 回答 2

0

我刚刚在两个数据库(SQL Server 2012 上名为 x6 的本地和外部数据库)上运行了它

create view dbo.view1 
as

select * from dbo.x5 inner join x6.dbo.t2
on dbo.x5.i1 = x6.dbo.t2.x1
;
go

create view dbo.view2
as

select * from dbo.x5 inner join x6.dbo.t2
on dbo.x5.i1 = x6.dbo.t2

未创建 View2,因为我没有引用用于连接表 x5 的列,并显示以下消息:

无法绑定多部分标识符“x6.dbo.t2”。因此,当我明确说明用于加入的列时,它就起作用了。此外,如果两个表中有重复的名称,它可能会混淆。

如果两个表中都有一个名为 state1 的列,并且您执行 select name1 from.... if 会给您一个模棱两可的参考错误。

于 2015-03-11T14:42:36.260 回答
0

您需要为每个外部数据库引用创建额外的 SQL 项目并导入其他 dbo。然后,在您的主项目中创建对其他(外部参考)项目的引用。您可能必须在主数据库(maindb.schema.object -> schema.object)中查找/替换任何也引用主数据库的三级引用。最后,构建解决方案,如果它没有错误,您的参考错误应该被清除。

您可以使用报告的错误代码(71561、71501)来搜索其他人如何解决此问题,但上述步骤对我有用。

于 2015-03-11T14:38:06.917 回答