#sql-server #azure-devops #sql-server-2014 #sql-server-data-tools #dacpac
#sql-сервер #azure-devops #sql-server-2014 #sql-server-data-tools #dacpac
Вопрос:
У нас есть устаревшее приложение и его база данных, которая содержит более 7000 объектов, включая хранимые процедуры, представления, функции, синонимы и так далее.
Сейчас мы внедряем Azure DevOps, поэтому, когда я импортирую файл dacpac в проект базы данных, я вижу больше неразрешенных ошибок. Когда я проверяю, есть больше неиспользуемых хранимых процедур и представлений, которые ссылаются на столбцы таблицы, которые сейчас не существуют.
Как я могу найти объекты, которые ссылаются на недопустимые столбцы и таблицы?
Ответ №1:
Пожалуйста, проверьте эту статью, чтобы найти неработающую хранимую процедуру с использованием sp_refreshsqlmodule
.
Ответ №2:
Я не уверен, что вы сможете найти все в автоматическом режиме. SSDT жалуется на неразрешенную ссылку не только при наличии поврежденного объекта, но и при использовании 3-4 имен частей (перекрестные ссылки на базы данных), поэтому, вероятно, решение, предоставленное @Krzysztof, не будет работать или будет работать только частично.
Что вам нужно сделать:
- Найдите все объекты 3-4 части в коде
- Добавьте все базы данных, необходимые для этого кода, в качестве ссылок
- Создайте синонимы для каждого из этих объектов
- Используйте
[$(server_var)].[$(database_var)].schema.object
синтаксис в своих синонимах
Эти шаги не так сложны, как может показаться. Вы можете вносить ~ 90% изменений массово, используя замену строк во всех файлах. Например, если вы используете объекты из другой базы данных -> DatabaseA. Таким образом, в коде у вас будут только ограниченные комбинации возможных имен объектов:
- DatabaseA..Имятаблицы
- DatabaseA.dbo.tableName
- DatabaseA.other_schema.Имя_таблицы
- [База данных] ..Имятаблицы
- … и так далее, Если вы замените все эти значения на
dbo.tableName
wheredbo.tableName
будет новым синонимом, тогда это должно сработать.
Обычно этот процесс должен занимать максимум 1-2 дня.