VS 2012 Database Project неразрешенная ссылка на объект Ошибка

Я создал проект базы данных SQL Server в VS 2012 и импортировал нашу базу данных. Когда я создаю проект, я получаю много ошибок «неразрешенная ссылка на объект». Эти ошибки относятся только к нескольким представлениям, которые есть в моей базе данных. Синтаксис этих представлений правильный, и я не использую временные таблицы. Что я должен проверить, чтобы решить эту проблему?

ОБНОВЛЕНИЕ: Это один пример:

    CREATE view [Factory].[NonStartedOrders]
as
 SELECT 

"Customers"."CustomerName", "Customers"."CustomerAName",
"Customers"."MarketID",
"Orders"."OrderID", 
"Orders"."ApproveDate", 
"FactoryOrders"."FactoryID", 
"FactoryOrders"."EstEndDate", 
"FactoryOrders"."StatusID", 
"FactoryOrders"."TotalWeight", 
"Karats"."KaratEName"

FROM   (("Taiba"."Sales"."FactoryOrders" "FactoryOrders" 
INNER JOIN "Taiba"."Sales"."Orders" "Orders" ON "FactoryOrders"."OrderID"="Orders"."OrderID") 
INNER JOIN "Taiba"."General"."Customers" "Customers" ON "Orders"."CustomerID"="Customers"."CustomerID") 
INNER JOIN "Taiba"."MasterPiece"."Karats" "Karats" ON "Orders"."MKaratID"="Karats"."KaratID"

«Тайба» — это имя моей базы данных. Я получаю 30 ошибок только для этого представления. Вот несколько ошибок из них:

Error   217 SQL71561: View: [Factory].[NonStartedOrders] has an unresolved reference to object [Taiba].[Sales].[FactoryOrders]

Error   219 SQL71561: View: [Factory].[NonStartedOrders] contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects: [Taiba].[Sales].[FactoryOrders].[FactoryOrders]::[OrderID], [Taiba].[Sales].[FactoryOrders].[OrderID] or [Taiba].[Sales].[Orders].[FactoryOrders]::[OrderID].

person Adel Khayata    schedule 14.11.2012    source источник
comment
Шаг первый: покажите пример одного из представлений и конкретную ошибку. Также имейте в виду, что то, что база данных работает, не означает, что у вас нет реальных ошибок и предупреждений, о которых вы не знали раньше.   -  person John Saunders    schedule 14.11.2012
comment
Я обновил вопрос с примером.   -  person Adel Khayata    schedule 14.11.2012


Ответы (9)


Еще одна возможность заключается в том, что схема, которую вы использовали в своем представлении/таблице и т. д., не существует в проекте. Возможно, вам потребуется добавить схему в проект базы данных VS.

Щелкните правой кнопкой мыши проект и Add > New Item > Schema

person Gwasshoppa    schedule 03.02.2014
comment
Это именно то, что я искал. - person K0D4; 12.03.2015
comment
Спасибо за это - я вручную создаю проект базы данных для хранилища данных SQL Azure только для системы управления версиями, и это именно то, что мне нужно. - person How 'bout a Fresca; 23.02.2016
comment
Убедитесь, что вы добавили файл схемы типа. Если вы добавите файл типа «скрипт» (обычный файл с расширением .sql), в котором вы создаете схему, нерешенная проблема со ссылками сохранится. - person DiederikTiemstra; 07.09.2017

Я решил эту проблему.

Кажется, некоторые из моих представлений/SP ссылались на таблицы, используя это соглашение об именах (полное имя из 3 частей):

Имя Базы Данных.ИмяСхемы.ИмяТаблицы

Я изменил все ссылки следующим образом:

ИмяСхемы.ИмяТаблицы

person Adel Khayata    schedule 02.12.2012
comment
На всякий случай, если кто-то увидит эту ошибку, а приведенное выше не сделает это за вас... есть также шанс, что вы увидите эту ошибку, если у вас есть проект VS DB и столбцы, на которые вы ссылаетесь, в объекте, где существующая ошибка не соответствует определениям таблиц, которые вы проверили в TFS (в отличие от фактических столбцов). ХТН. - person Sanjay Uttam; 19.03.2013
comment
Это обходной путь, который я тоже придумал, но я бы не назвал его решением, если вы коснулись кода для сотен объектов базы данных. - person cdonner; 04.09.2013
comment
если вы используете этот обходной путь, вы можете столкнуться с проблемами, если в основной БД используется одно и то же имя SchemaName.TableName. - person H A; 23.08.2016

В моем случае не удалось найти функцию Build Action=None, поэтому она не включалась в компиляцию.

Изменение действия сборки на Build исправило это.

person fiat    schedule 25.10.2013
comment
Это означает, что вы на самом деле не компилируете файл. - person Edward Olamisan; 06.08.2014
comment
Это помогло мне, я выбрал сценарий (не в сборке) в качестве типа сценария по ошибке при добавлении нового файла сценария, когда я хотел, чтобы был сценарий (сборка) - person Padmika; 14.10.2020

Это случилось со мной при создании CTE в Visual Studio 2015. Я изменил действие сборки на компиляцию, и ошибки исчезли.

  1. Выберите файл(ы) с ошибкой
  2. Нажмите F4, чтобы увидеть свойства.
  3. Выберите «Компилировать» в раскрывающемся списке «Действие сборки».

Надеюсь, это поможет кому-то.

person ClarenceG    schedule 22.10.2015
comment
Я пробовал. Действительно, ошибки исчезли, но сравнение схемы не работает. Он больше не распознает структуру внутри проекта.... - person AXMIM; 27.04.2017

Чтобы сослаться на другую схему sqlproj и использовать имена, состоящие из трех частей, измените файл .sqlproj, добавив элемент DatabaseVariableLiteralValue в указанный проект.

Внутри такого элемента, как <ProjectReference Include="..\SomeDatabaseProject\SomeDatabaseProject.sqlproj">, добавьте следующее:

<DatabaseVariableLiteralValue>SomeDatabaseProject</DatabaseVariableLiteralValue>

Например:

    <ProjectReference Include="..\SomeDatabaseProject\SomeDatabaseProject.sqlproj">
      <Name>SomeDatabaseProject</Name>
      <Project>{some-project-guid}</Project>
      <Private>True</Private>
      <DatabaseVariableLiteralValue>SomeDatabaseProject</DatabaseVariableLiteralValue>
    </ProjectReference>

Затем вы можете использовать четкие ссылки на имена, состоящие из трех частей, например SomeDatabaseProject.SomeSchema.SomeTable.

person Sorensen    schedule 01.10.2019

Возможно, объекты находятся внутри тега NotInBuild в файле проекта для именования или других проблем. В моем случае я сохранил файл с ..sql, и дополнительная точка заставляла его перемещаться под тегом NotInBuild внутри файла проекта. Я исправил расширение и переместил отсутствующий объект в тег сборки, и это решило проблему.

person Nilanjan Pal    schedule 07.05.2018

Попробуйте явно определить класс:

класс. Указывает класс защищаемого объекта, для которого предоставляется разрешение. Квалификатор области :: является обязательным.

Прочтите документацию по оператору SQL GRANT: http://technet.microsoft.com/en-us/library/ms187965.aspx

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

GRANT EXECUTE ON TYPE::[dbo].[MessageTableType] TO [PostOffice_Role];
person superlogical    schedule 26.03.2014

Вы также получите эту ошибку при добавлении таблицы (используя файл .sql) и если вы не зарегистрируете файл .sqlproj.

person Dev    schedule 24.08.2016

Это может быть пограничным случаем, но если в определении объекта вы также документируете объект (во всяком случае, мы это делаем...) с помощью sp_addextendedproperty, вы также можете получить эту ошибку, если указали неверный тип объекта, что может произойти, если скопировать и склеивание. Ошибка «неразрешенная ссылка на объект» здесь имеет смысл, если подумать.

Например, следующее воссоздает ошибку, поскольку тип level1 должен быть «ПРОЦЕДУРА», а не «ФУНКЦИЯ».

EXEC sp_addextendedproperty
  @name = N'MS_Description',
  @value = N'Description of the stored procedure...',
  @level0type = N'SCHEMA',
  @level0name = N'dbo',
  @level1type = FUNCTION',
  @level1name = N'spMyStoredProcedureName'
GO
person Fetchez la vache    schedule 14.12.2018