Pokud se vám zobrazí chyba, že „identifikátor z více částí nelze svázat.“, obvykle to znamená, že před jeden nebo více sloupců přidáváte předponu buď tabulku, která není zahrnuta ve vašem dotazu, nebo alias které jste ve skutečnosti nepřiřadili ke stolu.
Naštěstí vám chybová zpráva ukazuje, který vícedílný identifikátor způsobuje problém.
Příklad
Zde je příklad demonstrující, jak získat chybu.
SELECT * FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Výsledek:
Msg 4104, Level 16, State 1, Line 3 The multi-part identifier "c.CatName" could not be bound.
V tomto příkladu jsem zapomněl zahrnout alias pro Kočky tabulka.
K chybě dojde také v případě, že se pokusíte odkazovat na název tabulky poté, co jste již zadali alias.
Takhle:
SELECT * FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;
Výsledek:
Msg 4104, Level 16, State 1, Line 3 The multi-part identifier "Cats.CatName" could not be bound.
Takže v tomto případě jsem správně přiřadil alias, ale v ON
klauzule Odkazoval jsem na skutečný název tabulky místo na alias.
Řešení
Řešením je tedy zajistit, abyste přiřadili všechny aliasy, na které byste mohli později v dotazu odkazovat, a také se ujistit, že tyto aliasy používáte přímo místo názvu tabulky.
Pokud tedy budete používat aliasy, postupujte takto:
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Nebo pokud se rozhodnete nepoužívat aliasy, jako je tento:
SELECT * FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;