/ / sql-server、sql-server-2005、構文、/ SQL Server 2005マルチパート識別子 "x"はバインドできませんでした。

SQL Server 2005マルチパート識別子 "x"はバインドできませんでした - sql、sql-server、sql-server-2005、構文

私は文法の問題があると思うが、答えを見つけるのに苦労している...

誰でも理由を説明できますか

SELECT TOP 3 * FROM Facilities
INNER JOIN FacilityStates
ON FacilityStates.Asset = Facilities.ID
WHERE Facilities.ID = "MyFacility"

適切な結果をコンパイルして返しますが、私は完全修飾バージョンと思います

SELECT TOP 3 * FROM [dbo].[Facilities]
INNER JOIN [dbo].[FacilityStates]
ON [dbo].[FacilityStates.Asset] = [dbo].[Facilities.ID]
WHERE [dbo].[Facilities.ID] = "MyFacility"

throws "マルチパート識別子" x "はバインドできませんでした。" "on"節と "where"節の左右の部分については?

回答:

回答№1の場合は3

あなたは Table.Column 大括弧の1組で:

....
ON [dbo].[FacilityStates.Asset] = [dbo].[Facilities.ID]
....

これは:

....
ON [dbo].[FacilityStates].[Asset] = [dbo].[Facilities].[ID]
....

SQL Serverの角括弧は、スペースを含む可能性のあるオブジェクト名または予約語であることを明示的に示すために使用されます。だからあなたが結合したとき FacilityStates.Asset 一組の括弧内に、その名前のオブジェクトがあることをSQL Serverに伝えていました。それはない。


回答№2の場合は1

角カッコの配置は次のとおりです。

SELECT TOP 3 * FROM [dbo].[Facilities]
INNER JOIN [dbo].[FacilityStates]
ON [dbo].[FacilityStates].[Asset] = [dbo].[Facilities].[ID]
WHERE [dbo].[Facilities].[ID] = "MyFacility"

回答№3の場合は1

角括弧内のすべてが1つの名前であることを理解してください。あなたは、大括弧で囲まれたテーブル名とフィールド名を一緒に囲んでいます。有効なクエリは次のとおりです。

SELECT TOP 3 *
FROM [dbo].[Facilities]
INNER JOIN [dbo].[FacilityStates]
ON [dbo].[FacilityStates].[Asset] = [dbo].[Facilities].[ID]
WHERE [dbo].[Facilities].[ID] = "MyFacility"