Sql server 使用SSDT,当我有一个引用不同数据库中对象的视图时,如何解决SQL71561错误?
我在SSDT中有一个数据库项目,当我导入一个引用不同数据库中对象的视图时,我得到错误SQL71561,其描述如下: 错误4 SQL71561:视图:[schema].[viewname]具有未解析的 对对象[other_db].[schema].[table].[column]的引用Sql server 使用SSDT,当我有一个引用不同数据库中对象的视图时,如何解决SQL71561错误?,sql-server,sql-server-data-tools,Sql Server,Sql Server Data Tools,我在SSDT中有一个数据库项目,当我导入一个引用不同数据库中对象的视图时,我得到错误SQL71561,其描述如下: 错误4 SQL71561:视图:[schema].[viewname]具有未解析的 对对象[other_db].[schema].[table].[column]的引用 我花了一些时间试图弄明白这一点,因此为了帮助其他遇到这一问题的人,我将发布对我有效的答案。为了解决这个问题,我添加了对另一个数据库的引用,清除了对话框中的“数据库变量”字段。如果我没有清除这个字段,在进行模式比较时
我花了一些时间试图弄明白这一点,因此为了帮助其他遇到这一问题的人,我将发布对我有效的答案。为了解决这个问题,我添加了对另一个数据库的引用,清除了对话框中的“数据库变量”字段。如果我没有清除这个字段,在进行模式比较时,SSDT将使用数据库变量名生成更新脚本,这将失败
转到项目属性并取消选中“启用公共对象的扩展Transact-SQL验证”可使项目成功生成。我的问题来自视图。在我看来
...FROM [MyDatabase].[dbo].[MyTable]
我把它换成了
...FROM [MyTable]
原因是您可能正在将bacpac/dacpac导入其他数据库名称,因此对[MyDatabase]的引用可能无效。如果生成顺序不正确,您可能会遇到此问题 我在从源代码管理中提取项目的新副本并执行“构建解决方案”时遇到了这种情况
如果引用不起作用,请确保构建引用的数据库[other_db]。一旦我构建了[other_db],我的引用就起作用了。当我将Project Properties>Target Platform从SQL Server 2016更改为SQL Server 2014时,这些错误开始出现在我身上 在我的场景中,我有一个数据库,它是由一个SSDT项目(a)中的外部工具和另一个项目(B)中的我的SQL视图等创建的,引用来自B->a 在针对SQL 2016进行开发后,我发现我们的测试环境在2014年运行,因此在(B)中更改了目标平台,以便我可以部署。(A) 未部署-外部工具也已安装并配置为生成相同的数据库
奇怪的是,我后来能够修改(B)中的视图并发布,但后来想删除一个列。此时,由于这些引用错误,发布一直失败。将项目(A)上的目标平台更改为2014年,然后清除了错误并允许我继续操作。在尝试了上述四个答案之后,我的两个存储过程仍然出现相同的错误。(从1000多个错误到只有2个错误) 所以现在有效的是,我简单地用表名本身替换了表别名,构建成功了
--From
table1 t1 join table2 t2
t1.col1 = t2.col1
--To
table1 t1 join table2 t2
table1.col1 = t2.col1
以上解决方案都不适合我 但是这个: 并更改引用其他数据库项目的脚本。 例如,如果在
AdventureWorks
中有一个视图引用了AdventureWorksDW
,请使用以下语法:
select * from [$(Your Database Variable)].Schema.Object
e、 g
你有没有办法抑制这些错误?我无法添加数据库引用,因为我在需要引用的数据库中加密了内容。该选项现在已被Microsoft删除(已删除)。。还有其他选择吗?使用变量名而不是直接名修复了错误,但是当我与数据库进行比较时,它显示为需要更新。您也可以使用dacpac文件在项目中引用它。很好,这就是我修复它的原因。当您认为SSDT的一个主要用途是保持一组数据库与一个单一的模式同步时,它是完全有意义的。在这种情况下,我为什么要提供一个特定的数据库名称?我只需要为部署到的每个DB更改它。妈的…你已经指出了,这看起来很简单,哈哈。感谢Jason,这对于解决即时错误是很好的,但是后果可能会很严重,比如在UDF中。这不应该长期使用。
select * from [$(Your Database Variable)].dbo.dimDate