Хобрук: Ваш путь к мастерству в программировании

Создание представления с использованием синонимов в проекте базы данных (Visual Studio 2012)


Я бьюсь головой о стену из-за странной ошибки, которую я получаю в VS2012. У меня есть проект базы данных, который включает в себя несколько синонимов. В основном это ссылки на другую базу данных, чтобы избежать динамического создания SQL. Я уже добавил необходимую справочную базу данных для синонимов. Все работает отлично, за исключением пары представлений, которые используют некоторые из этих синонимов! Поскольку я использую одни и те же синонимы в своих хранимых процедурах, и они не вызывают сбоев сборки, я не уверен, почему представления вызывают проблемы.
Сообщение об ошибке гласит: "SQL05313: синоним "xxx" относится к недопустимому объекту". Вот пример кода:
dbo.MyTable.sql...
CREATE SYNONYM [dbo].[MyTable] FOR [$(FOO_DB)].[dbo].[MyTable];
dbo.MyProc
CREATE [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.


Кто-нибудь еще сталкивался с этой проблемой? Если да, я ценю вашу помощь :)


  • Когда именно вы получаете эту ошибку? Вы пытались выполнить скрипт в SSMS? 15.10.2014
  • я использую vs 2015 ту же проблему, с которой я сталкиваюсь. пожалуйста, кто-нибудь получил ответ на это, поделитесь. 06.04.2016
  • Вы нашли какое-либо решение для этого? 11.11.2016

Ответы:


1

По какой-то причине ошибки ссылок в SP рассматриваются как предупреждения, а в представлениях — как ошибки. Таким образом, ошибка просто означает, что ссылка на $(FOO_DB) не работает - дважды проверьте правильность настройки ссылки на переменную.

Если вы ссылаетесь на другой проект БД, он должен отдельно компилироваться в .dacpac (например, вы не можете создавать циклические ссылки). Если вам действительно нужна циклическая ссылка (представление в FOO_DB1 ссылается на FOO_DB2, а представление в FOO_DB2 ссылается на FOO_DB1), просмотрите составные объекты (ссылка на базу данных того же типа, что и база данных).

08.12.2014
  • Здравствуйте, я попробовал то, что вы предложили. Но я все еще не рассматриваю синоним. Сценарий: основной проект, проект внешнего объекта. В основном проекте у меня есть представление, которое делает выбор из синонима. Когда я создаю проект, он говорит, что синоним не может быть найден в базе данных. Синоним был изменен на: CREATE SYNONYM [dbo].[TestSynonym] FOR [$(ExternalServer)].[$(ExternalDB)].[dbo].[Table1] И я создал Table1 в проекте ExternalObjects. Я также добавил ссылку на базу данных в основном проекте в ExternalObjects. Что мне не хватает? Спасибо, Алекс 10.11.2016

  • 2

    Я получил эту ошибку и в конце концов обнаружил, что запустил CREATE SYNONYM fred FOR ... вместо CREATE SYNONYM **dbo**.fred FOR .... Поэтому в моей личной схеме был создан синоним вместо dbo, и это остановило CREATE VIEW. Я знаю, что ваш код включает [dbo].[MyTable], но есть ли в вашей собственной схеме идентичный синоним из предыдущей команды CREATE SYNONYM, которая не включала [dbo], что может сбить с толку команду CREATE VIEW?

    07.07.2017
    Новые материалы

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..