我在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].
答案 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,错误消失了。
希望这有助于某人。
答案 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>
。