Om du får ett felmeddelande som talar om för dig att "Den flerdelade identifieraren kunde inte bindas." betyder det vanligtvis att du prefixer en eller flera kolumner med antingen en tabell som inte ingår i din fråga eller ett alias som du faktiskt inte har tilldelat en tabell.
Lyckligtvis visar felmeddelandet dig vilken flerdelad identifierare som orsakar problemet.
Exempel
Här är ett exempel för att visa hur du får felet.
SELECT * FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Resultat:
Msg 4104, Level 16, State 1, Line 3 The multi-part identifier "c.CatName" could not be bound.
I det här exemplet glömmer jag att inkludera ett alias för Katter bord.
Felet kommer också att uppstå om du försöker referera till tabellnamnet efter att du redan har angett ett alias.
Så här:
SELECT * FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;
Resultat:
Msg 4104, Level 16, State 1, Line 3 The multi-part identifier "Cats.CatName" could not be bound.
Så i det här fallet tilldelade jag aliaset korrekt, men i ON
klausul Jag refererade till det faktiska tabellnamnet istället för aliaset.
Lösningen
Så lösningen är att se till att du har tilldelat alla alias som du kan referera till senare i frågan, och även att se till att du använder dessa alias istället för tabellnamnet direkt.
Så om du ska använda alias, så här:
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Eller om du väljer att inte använda alias, så här:
SELECT * FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;