Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Errore 4104 di SQL Server:impossibile associare l'identificatore in più parti.

Se viene visualizzato un messaggio di errore che ti informa che "Impossibile associare l'identificatore in più parti", in genere significa che stai anteponendo a una o più colonne una tabella che non è inclusa nella query o un alias che non hai effettivamente assegnato a una tabella.

Fortunatamente, il messaggio di errore mostra quale identificatore multiparte sta causando il problema.

Esempio

Ecco un esempio per dimostrare come ottenere l'errore.

SELECT * FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Risultato:

Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "c.CatName" could not be bound.

In questo esempio, dimentico di includere un alias per i Cats tabella.

L'errore si verificherà anche se tenti di fare riferimento al nome della tabella dopo aver già fornito un alias.

In questo modo:

SELECT * FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;

Risultato:

Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "Cats.CatName" could not be bound.

Quindi in questo caso ho assegnato correttamente l'alias, ma in ON clausola I ha fatto riferimento al nome effettivo della tabella anziché all'alias.

La soluzione

Quindi la soluzione è assicurarti di aver assegnato tutti gli alias a cui potresti fare riferimento più avanti nella query e anche assicurarti di utilizzare tali alias invece del nome della tabella direttamente.

Quindi, se hai intenzione di utilizzare alias, in questo modo:

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Oppure, se scegli di non utilizzare gli alias, in questo modo:

SELECT * FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;