VS 2012数据库项目“未解析的对象引用”错误

时间:2012-11-14 05:01:37

标签: database visual-studio-2012 sql-server-data-tools

我在VS 2012中创建了SQL Server数据库项目&导入我们的数据库 当我构建项目时,我得到了很多“未解析的对象引用”错误。 这些错误仅适用于我的数据库中的一些视图。 这些视图的语法是正确的&我没有使用临时表。 我应该检查什么来解决这个问题?

更新: 这是一个例子:

    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].

9 个答案:

答案 0 :(得分:40)

另一种可能性是您在视图/表等中使用的模式在项目中不存在。您可能需要将架构添加到VS数据库项目。

右键单击项目并Add > New Item > Schema

答案 1 :(得分:23)

我解决了这个问题。

似乎我的一些观点/ SP使用此命名约定引用了表(3部分限定名称):

DatabaseName.SchemaName.TableName

我将所有引用更改为以下内容:

SchemaName.TableName

答案 2 :(得分:14)

就我而言,无法找到的功能是Build Action = None ,因此它没有包含在编译中。

将构建操作更改为构建已更正此问题。

答案 3 :(得分:7)

在Visual Studio 2015中构建CTE时发生了这种情况。我将Build Action更改为Compile,错误消失了。

  1. 选择错误
  2. 的文件
  3. 按F4查看属性。
  4. 在Build Action下拉列表中选择'Compile'。
  5. 希望这有助于某人。

答案 4 :(得分:1)

对象可能位于项目文件中的 NotInBuild 标记内,用于命名或其他问题。在我的情况下,我用..sql保存文件,额外的点使它在项目文件中的NotInBuild标签下移动。我更正了扩展并在构建标记下移动了丢失的对象,这解决了问题。

答案 5 :(得分:0)

尝试明确定义类:

  

类: 指定权限所在的安全类   理所当然的。范围限定符::是必需的。

阅读有关SQL GRANT语句的文档:http://technet.microsoft.com/en-us/library/ms187965.aspx

在我的情况下,我有一个用户定义的表类型。

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

答案 6 :(得分:0)

当您添加表(使用.sql文件)并且未签入.sqlproj文件时,您也会收到此错误

答案 7 :(得分:0)

这可能是一个极端的情况,但是如果您在对象定义中还使用sp_addextendedproperty记录了该对象(无论如何,我们还是这样做的),如果您声明了错误的对象类型,也可能会收到此错误-可能发生如果复制和粘贴。当您考虑它时,“对对象的未解决的引用”错误在这里很有意义。

例如,以下内容将重新创建错误,因为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

答案 8 :(得分:0)

要引用另一个sqlproj的架构并使用三部分命名,请修改.sqlproj文件,以在引用的项目上添加websvcsrv元素。

在像这样的元素中 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>