我有这个问题,我得到一个多部分标识符错误。我只是要求解释而不是解决方案。我能够让查询工作,但我仍然没有理解这个问题。下面是三个查询,第一个和第三个工作正常,但我不明白为什么第二个是抛出错误:
无法绑定多部分标识符“[TableName]。[FieldName]”。
作品:
select [SchemaName].[TableName].[FieldName]
from [SchemaName].[TableName]
引发错误:
select [TableName].[FieldName]
from [SchemaName].[TableName]
作品:
select [FieldName]
from [SchemaName].[TableName]
提前致谢。
答案 0 :(得分:1)
它应该是
select [FieldName] from [SchemaName].[TableName]
OR
select [FieldName] from [DatabaseName].[SchemaName].[TableName]
OR
select [TableName].[FieldName] from [DatabaseName].[SchemaName].[TableName]
OR
select [SchemaName].[TableName].[FieldName] from [DatabaseName].[SchemaName].[TableName]
OR
select [DataBaseName].[SchemaName].[TableName].[FieldName] from [DatabaseName].[SchemaName].[TableName]
但它永远不会
SELECT <Any-of-The-Above> FROM [TableName].[FieldName] --<-- Cant have Field name here
答案 1 :(得分:0)
您的问题很可能是您使用数据库用户登录,该数据库用户的默认架构与您选择的表的架构不同(或者没有默认架构)。
例如:假设您的数据库中有2个架构,dbo
和reports
。您的数据库用户使用默认架构dbo
进行设置。如果您在reports
架构reports.table1
中有一个表格,并且dbo
的{{1}}架构中没有指向dbo.table1
的同义词,那么您如果在选择字段名称时未指定架构,则会出现此错误。
注意:这似乎在SQL 2008 R2中有效,但是当我在SQL 2005中测试时,我收到了错误:
消息4104,级别16,状态1,行1多部分标识符 “TestTable.TestField”无法绑定。
您可以使用以下查询检查用户的默认架构:
reports.table1
解决这个问题的方法是在查询中使用表别名,或者像在OP中提到的那样指定表的完整路径。
select p.name, p.default_schema_name
from sys.database_principals p
order by p.name
答案 2 :(得分:0)
因此,为了回答我自己的问题,我使用的数据库的兼容级别设置为80.我将其更改为100并且问题已解决。感谢大家的反馈。