Я бьюсь головой о стену из-за странной ошибки, которую я получаю в VS2012. У меня есть проект базы данных, который включает в себя несколько синонимов. В основном это ссылки на другую базу данных, чтобы избежать динамического создания SQL. Я уже добавил необходимую справочную базу данных для синонимов. Все работает отлично, за исключением пары представлений, которые используют некоторые из этих синонимов! Поскольку я использую одни и те же синонимы в своих хранимых процедурах, и они не вызывают сбоев сборки, я не уверен, почему представления вызывают проблемы.
Сообщение об ошибке гласит: "SQL05313: синоним "xxx" относится к недопустимому объекту". Вот пример кода:
dbo.MyTable.sql...CREATE SYNONYM [dbo].[MyTable] FOR [$(FOO_DB)].[dbo].[MyTable];
dbo.MyProcCREATE [dbo].[MyProc] AS SELECT col1, col2, col3 FROM [dbo].[MyTable];
SUCCESS: this works
dbo.MyView.sql. ..CREATE VIEW [dbo].[MyView] AS SELECT col1, col2, col3 FROM [dbo].[MyTable];
ERROR: SQL05313 Synonym '[dbo].[MyTable]' refers to an invalid object.
Кто-нибудь еще сталкивался с этой проблемой? Если да, я ценю вашу помощь :)
Создание представления с использованием синонимов в проекте базы данных (Visual Studio 2012)
- Когда именно вы получаете эту ошибку? Вы пытались выполнить скрипт в SSMS? 15.10.2014
- я использую vs 2015 ту же проблему, с которой я сталкиваюсь. пожалуйста, кто-нибудь получил ответ на это, поделитесь. 06.04.2016
- Вы нашли какое-либо решение для этого? 11.11.2016
Ответы:
По какой-то причине ошибки ссылок в SP рассматриваются как предупреждения, а в представлениях — как ошибки. Таким образом, ошибка просто означает, что ссылка на $(FOO_DB) не работает - дважды проверьте правильность настройки ссылки на переменную.
Если вы ссылаетесь на другой проект БД, он должен отдельно компилироваться в .dacpac (например, вы не можете создавать циклические ссылки). Если вам действительно нужна циклическая ссылка (представление в FOO_DB1 ссылается на FOO_DB2, а представление в FOO_DB2 ссылается на FOO_DB1), просмотрите составные объекты (ссылка на базу данных того же типа, что и база данных).
Я получил эту ошибку и в конце концов обнаружил, что запустил CREATE SYNONYM fred FOR ...
вместо CREATE SYNONYM **dbo**.fred FOR ...
. Поэтому в моей личной схеме был создан синоним вместо dbo
, и это остановило CREATE VIEW
. Я знаю, что ваш код включает [dbo].[MyTable]
, но есть ли в вашей собственной схеме идентичный синоним из предыдущей команды CREATE SYNONYM
, которая не включала [dbo]
, что может сбить с толку команду CREATE VIEW
?