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

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

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

Ошибка 4 SQL71561: Вид: [схема]. [viewname] имеет неразрешенный ссылка на объект [other_db]. [схема]. [таблица]. [column]

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

4b9b3361

Ответ 1

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

  • Добавить Справочник по базам данных в проект.
  • В моем случае другая база данных была другим проектом в том же решении, поэтому я смог выбрать его в первом раскрывающемся списке в диалоговом окне "Добавить ссылку базы данных".
  • Убедитесь, что текст в поле "Имя базы данных" правильный.
  • Очистите поле "База данных".

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

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

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

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

Ответ 2

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

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

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

...FROM [MyTable]

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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