Как с помощью SSDT разрешить ошибки SQL71561, когда у меня есть представление, которое ссылается на объекты в другой базе данных?

У меня есть проект базы данных в SSDT, и когда я импортирую представление, которое ссылается на объекты в другой базе данных, я получаю ошибку SQL71561 с описанием в следующих строках:

Ошибка 4 SQL71561: представление: [схема]. [Имя представления] имеет неразрешенную ссылку на объект [other_db]. [Схема]. [Таблица]. [Столбец]

Я потратил некоторое время, пытаясь понять это, поэтому, чтобы помочь другим столкнуться с этим, я опубликую ответ, который сработал для меня.


person Jeff Ogata    schedule 28.08.2012    source источник


Ответы (6)


Чтобы решить эту проблему, я добавил ссылку на другую базу данных, убрав поле «Переменная базы данных» в диалоговом окне. Если бы я не очистил это поле, при сравнении схемы SSDT сгенерировал бы сценарий обновления, используя имя переменной базы данных, что привело бы к ошибке.

  1. Добавьте в проект ссылку на базу данных.
  2. В моем случае другая база данных была другим проектом в том же решении, поэтому я смог выбрать ее в первом раскрывающемся списке диалогового окна «Добавить ссылку на базу данных».
  3. Убедитесь, что текст в поле «Имя базы данных» правильный.
  4. Очистите поле «Переменная базы данных».

Посмотрите на текст «Пример использования» и убедитесь, что он выглядит так, как ожидалось. Нажмите «ОК», чтобы добавить ссылку, и это должно устранить ошибки «неразрешенной ссылки».

После этого я смог провести сравнение схем, но попытка создания проекта привела к следующей ошибке:

Ошибка 408 SQL00208: недопустимое имя объекта «db.schema.table».

Переход к свойствам проекта и снятие флажка «Включить расширенную проверку Transact-SQL для общих объектов» позволили проекту успешно построить.

person Jeff Ogata    schedule 28.08.2012
comment
Есть идеи как-то подавить ошибки? Я не могу добавить ссылку на базу данных, поскольку у меня есть зашифрованный контент в базе данных, на которую мне нужно ссылаться. - person Manuel; 05.08.2013
comment
Эта опция теперь удалена Microsoft (Sunsetted) .. есть ли альтернативы? - person SAS; 13.01.2014
comment
Использование имени переменной вместо прямого имени устранило ошибку, но когда я сравниваю с базой данных, выясняется, что нужно обновить. - person Brian; 28.04.2017
comment
Вы также можете использовать файл dacpac для ссылки на него в своем проекте. - person David; 12.07.2017

Моя проблема была с точки зрения. В представлении у меня было ...

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

Я заменил его на ...

...FROM [MyTable]

Причина в том, что вы можете импортировать bacpac / dacpac в базу данных с другим именем, поэтому ссылка на [MyDatabase] может быть недействительной.

person Jason Geiger    schedule 10.02.2014
comment
Отличный момент, это то, что исправило это для меня. Это имеет полный смысл, если учесть, что одно из основных применений SSDT - это синхронизация группы баз данных с единой схемой. В таком случае, зачем мне указывать конкретное имя базы данных? Мне просто нужно было бы изменить его для каждой развернутой БД. Черт ... теперь это кажется таким простым, когда ты указал на это, ха-ха. Спасибо Джейсон - person ; 10.02.2016
comment
Это хорошо, чтобы обойти немедленную ошибку, но последствия могут быть серьезными, например, в UDF. Это не должно использоваться долгое время. - person ajeh; 08.03.2018

Вы можете столкнуться с этим, если ваш порядок сборки неверен.

Я столкнулся с этим, когда вытаскивал новую копию проекта из системы управления версиями и выполнял «решение для сборки».

Если ссылка не работает, убедитесь, что вы создали указанную базу данных [other_db]. Как только я построил [other_db], мои ссылки заработали.

person fhilton    schedule 13.07.2015

Эти ошибки начали появляться у меня, когда я изменил Свойства проекта> Целевая платформа с SQL Server 2016 на SQL Server 2014.

В моем сценарии у меня есть база данных, которая создается внешним инструментом в одном проекте SSDT (A), а мои представления SQL и т. Д. В другом проекте (B) со ссылкой из B-> A.

Разработав для SQL 2016, я обнаружил, что наша тестовая среда работает в 2014 году, поэтому изменил целевую платформу в (B), чтобы я мог выполнить развертывание. (A) не развернут - внешний инструмент также установлен и настроен для создания той же базы данных.

Как ни странно, позже мне удалось изменить представления в (B) и опубликовать, но потом мне захотелось удалить столбец. На этом этапе публикация продолжала терпеть неудачу из-за этих ошибок ссылки. Изменение целевой платформы в проекте (A) на 2014 год устранило ошибку и позволило мне продолжить.

person robaker    schedule 31.10.2017

Попробовав все четыре вышеупомянутых ответа, я все еще получал ту же ошибку для двух из моих хранимых процедур (от 1000+ ошибок до всего 2).

Итак, что теперь сработало, я просто заменил имя псевдонима таблицы самим именем таблицы, и сборка прошла успешно.

--From
table1 t1 join table2 t2
t1.col1 = t2.col1
--To
table1 t1 join table2 t2
table1.col1 = t2.col1
person Swanand Pangam    schedule 15.11.2019

Ни одно из вышеперечисленных решений не работает для меня.

Но вот этот:

Добавить ссылку на базу данных

и измените те сценарии, которые относятся к другому проекту базы данных. например, если у вас есть представление в AdventureWorks, которое ссылается на AdventureWorksDW, используйте этот синтаксис:

select * from [$(Your Database Variable)].Schema.Object

e.g.

select * from [$(Your Database Variable)].dbo.dimDate
person Maziar Chitsaz    schedule 04.03.2021