2014-12-04 72 views
0

我遇到了此問題,其中出現多部分標識符錯誤。我只是要求解釋而不是解決方案。我能夠查詢工作,但我仍然不理解問題。下面是三個查詢和第一,第三,做工精細,但我不明白爲什麼第二個是引發錯誤:SQL Server:無法在查詢中綁定多部分標識符

The multi-part identifier "[TableName].[FieldName]" could not be bound.

作品:

select [SchemaName].[TableName].[FieldName] 
from [SchemaName].[TableName] 

拋出錯誤:

select [TableName].[FieldName] 
from [SchemaName].[TableName] 

作品:

select [FieldName] 
from [SchemaName].[TableName] 

在此先感謝。

+1

我不認爲你的例子是正確的。您無法從字段中選擇。更有可能您的第一個和第三個示例是... [SchemaName]。[TableOrViewOrUDFFunctionName]。無論如何,你無法從字段中選擇。您從表中選擇一個字段。 – 2014-12-04 21:33:07

+0

如果FieldName真的是一個表上的字段,那麼這些都不應該工作。您只能選擇表格,視圖,派生表格或表格變量的「FROM」。根本不應該可以從一個領域選擇。 – alroc 2014-12-04 21:33:44

+0

對不起,它應該讀取from子句中的[SchemaName]。[TableName] – Maxqueue 2014-12-04 21:45:27

回答

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 
+0

對於任何現在查看此問題並且被此答案困惑的人...這是原始問題的答案是正確的,但原來的問題有一個錯誤,現在已經糾正了。 – BateTech 2014-12-05 14:50:35

0

更多您的問題是,您在使用其默認模式是不是從你的表的架構不同的數據庫用戶登錄選擇(或者沒有默認模式)。

例如:假設您在數據庫中有兩個模式,即dboreports。您的數據庫用戶安裝了默認架構dbo。如果reports模式reports.table1中有一個表,並且dbo模式中dbo.table1dbo模式中沒有同義詞,指向reports.table1,那麼如果在選擇字段名稱時未指定模式,則會出現此錯誤。

注:這似乎在SQL 2008 R2的工作,但是當我在SQL 2005然後測試我收到的錯誤:

Msg 4104, Level 16, State 1, Line 1 The multi-part identifier "TestTable.TestField" could not be bound.

您可以使用此查詢檢查你的用戶的默認架構:

select p.name, p.default_schema_name 
from sys.database_principals p 
order by p.name 

一種方法來解決這個問題是在查詢中使用表別名,或者你在OP提到指定表的完整路徑。

select t.[FieldName] 
from [SchemaName].[TableName] as t 
0

因此,要回答我的問題,因爲我是用設置爲80。我把它改成100,問題就解決了該數據庫的兼容級別。非常感謝您的反饋。

相關問題