Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用SSDT,当我有一个引用不同数据库中对象的视图时,如何解决SQL71561错误?_Sql Server_Sql Server Data Tools - Fatal编程技术网

Sql server 使用SSDT,当我有一个引用不同数据库中对象的视图时,如何解决SQL71561错误?

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中有一个数据库项目,当我导入一个引用不同数据库中对象的视图时,我得到错误SQL71561,其描述如下:

错误4 SQL71561:视图:[schema].[viewname]具有未解析的 对对象[other_db].[schema].[table].[column]的引用


我花了一些时间试图弄明白这一点,因此为了帮助其他遇到这一问题的人,我将发布对我有效的答案。

为了解决这个问题,我添加了对另一个数据库的引用,清除了对话框中的“数据库变量”字段。如果我没有清除这个字段,在进行模式比较时,SSDT将使用数据库变量名生成更新脚本,这将失败

  • 将数据库引用添加到项目中
  • 在我的例子中,另一个数据库是同一解决方案中的另一个项目,因此我能够在“添加数据库引用”对话框的第一个下拉列表中选择它
  • 确保“数据库名称”字段中的文本正确无误
  • 清除“数据库变量”字段
  • 查看“示例用法”文本,并验证其是否符合预期。单击“确定”添加引用,这将处理“未解析引用”错误

    完成此操作后,我能够进行模式比较,但尝试构建项目时产生以下错误:

    错误408 SQL00208:对象名称“db.schema.table”无效


    转到项目属性并取消选中“启用公共对象的扩展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