Using SSDT, how do I resolve SQL71561 errors when I have a view that references objects in a different database?

谁说我不能喝 提交于 2019-11-27 02:10:26

问题


I have a database project in SSDT and when I import a view that references objects in a different database, I get error SQL71561, with a description along these lines:

Error 4 SQL71561: View: [schema].[viewname] has an unresolved reference to object [other_db].[schema].[table].[column]

I spent some time trying to figure this out, so to help others running into this I will post the answer that worked for me.


回答1:


To resolve this, I added a reference to the other database, clearing out the "Database variable" field in the dialog. If I didn't clear this field, when doing a schema compare, SSDT would generate the update script using the database variable name, which would fail.

  1. Add a Database Reference to the project.
  2. In my case the other database was another project in the same solution, so I was able to select it in the first drop down on the "Add Database Reference" dialog.
  3. Make sure the text in the "Database name" field is correct.
  4. Clear out the "Database variable" field.

Look at the "Example usage" text and verify that it looks as expected. Click "OK" to add the reference and that should take care of the 'unresolved reference' errors.

After doing this, I was able to do a schema comparison, but trying to build the project produced the following error:

Error 408 SQL00208: Invalid object name 'db.schema.table'.

Going to the project properties and unchecking "Enable extended Transact-SQL verification for common objects" allowed the project to build successfully.




回答2:


My problem was from a view. In the view I had...

...FROM [MyDatabase].[dbo].[MyTable]

I replaced it with...

...FROM [MyTable]

The reason is that you may be importing the bacpac/dacpac into a different database name so the reference to [MyDatabase] might not be valid.




回答3:


You can run into this if your build order is incorrect.

I ran into this when pulling a fresh copy of a project from source control and doing "build solution".

If a reference is not working, make sure you build the referenced database [other_db]. Once I built the [other_db] my references worked.




回答4:


These errors started appearing for me when I changed the Project Properties > Target Platform from SQL Server 2016 to SQL Server 2014.

In my scenario I have a database that is created by an external tool in one SSDT project (A) and my SQL views, etc in another project (B) with a reference from B->A.

Having developed against SQL 2016 I found our test environment was running 2014 so changed the target platform in (B) so I could deploy. (A) isn't deployed - the external tool is also installed and configured to produce the same database.

Strangely, I was later able to alter views in (B) and publish, but then wanted to remove a column. At this point the publish kept failing due to these reference errors. Changing the Target Platform on project (A) to 2014 then cleared the error and allowed me to proceed.




回答5:


After trying all the above four answers I was still getting same error for two of my stored procedures.(From 1000+ errors to just 2 )

So what worked now is, I simply replaced the table alias name with the table name itself and hoila the build succeeded.

--From
table1 t1 join table2 t2
t1.col1 = t2.col1
--To
table1 t1 join table2 t2
table1.col1 = t2.col1


来源:https://stackoverflow.com/questions/12161392/using-ssdt-how-do-i-resolve-sql71561-errors-when-i-have-a-view-that-references

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!