Проект базы данных 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].
Ответы
Ответ 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
.