我刚刚使用Sql Server 2008数据库项目将数据库导入我的Visual Studio项目。在解决了Visual Studio突出显示的许多问题后,我现在只剩下两个与提示索引相关的问题了。 2个警告(带有导致的陈述)是
SELECT a.FI, a.GD
FROM [RME].[dbo].[BP_RN] a with(index(idx_GD))
WHERE GD.STWithin(@Geometry) = 1
SQL04151:过程:[dbo]。[sp_TNFRME] 包含一个未解析的引用 宾语。对象没有 存在或参考是模糊的 因为它可以引用任何一个 以下对象: [dbo]。[BP_RN]。[idx_GD]或 [DBO]。[idx_GD]。
和
SELECT a.I
FROM [dbo].[N] a with(index(idx_G))
WHERE a.G.STIntersects(@Geometry) = 1
SQL04151:过程:[dbo]。[sp_DIOQE] 包含一个未解析的引用 宾语。对象没有 存在或参考是模糊的 因为它可以引用任何一个 以下对象:[dbo]。[idx_G]或 [DBO]。[N]。[idx_G]。
我之所以单独列出的原因是因为第一个是查询单独的数据库而我不确定这是否意味着它需要以不同的方式解决。
无论如何,我的问题是如何解决此错误或完全限定提示,使其不再含糊不清?
由于
答案 0 :(得分:1)
有一个黑客可以在不删除提示的情况下摆脱Visual Studio 2010 Ultimate中的警告,但你必须更改提示以使用index_id而不是索引的名称。
这适用于包含3个空间数据列的示例表,每个列都有一个索引。
空间索引是在VS2010 Ultimate中的数据库项目中创建的,从架构视图导航到表的索引文件夹,右键单击索引文件夹并选择添加空间索引。
每个空间索引的index_id取决于为同一个表创建空间索引的顺序 - 而不是创建任何其他索引的顺序。
空间索引之间的索引创建顺序取决于它们在架构视图索引文件夹中显示的从上到下的顺序,因此基本上是字母数字字典顺序。
空间索引的index_id值始终从384000开始,并按照每个额外创建的索引的顺序增加1。
对于具有3个空间索引的示例,我创建了名称:
删除和重新创建索引也为每个索引生成了相同的index_id。
所以,然后我换了:
WITH(INDEX(TABLEPREFIX_SPATIAL384000_COLUMNNAME1))
使用:
WITH(INDEX(384000))
Visual Studio在没有投诉的情况下进行编译,并使用正确的索引提示按预期运行查询。
CAVEAT:如果您必须升级现有数据库,则必须删除/创建,而不是重命名,并且您必须按正确的顺序执行此操作。这不是一个非常好的解决方法,但它将摆脱警告
我使用sql命令变量尝试了一种稍微好看的方法,如:
WITH(INDEX([$(my_geographic_index_name)]))
不幸的是,这也产生了不希望的警告。
祝你好运。