Подтвердить что ты не робот

Проект базы данных VS 2012 "неразрешенная ссылка на объект" Ошибка

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

UPDATE: Это один из примеров:

    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"

"Taiba" здесь - мое имя базы данных. Я получаю 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].
4b9b3361

Ответ 1

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

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

DatabaseName.SchemaName.TableName

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

SchemaName.TableName

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

  • Выберите файл с ошибкой
  • Нажмите F4, чтобы просмотреть свойства.
  • Выберите "Скомпилировать" в раскрывающемся списке "Действие".

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

Ответ 5

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

Ответ 6

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

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

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

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

GRANT EXECUTE ON TYPE::[dbo].[MessageTableType] TO [PostOffice_Role];

Ответ 7

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

Ответ 8

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

Например, следующее воссоздает ошибку, так как тип level1type должен быть "PROCEDURE", а не "FUNCTION".

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

Ответ 9

Чтобы сослаться на другую схему 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.