sql >> Database >  >> RDS >> Sqlserver

SQL Server-fout 4104:de meerdelige id kan niet worden gebonden.

Als u een foutmelding krijgt die aangeeft dat de "De meerdelige identifier kon niet worden gebonden.", betekent dit meestal dat u een of meer kolommen als voorvoegsel plaatst met een tabel die niet is opgenomen in uw zoekopdracht, of een alias die je niet echt aan een tafel hebt toegewezen.

Gelukkig laat de foutmelding je zien welke meerdelige identifier het probleem veroorzaakt.

Voorbeeld

Hier is een voorbeeld om te demonstreren hoe u de fout kunt krijgen.

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

Resultaat:

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

In dit voorbeeld vergeet ik een alias op te nemen voor de Cats tafel.

De fout treedt ook op als u probeert te verwijzen naar de tabelnaam nadat u al een alias heeft opgegeven.

Zoals dit:

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

Resultaat:

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

Dus in dit geval heb ik de alias correct toegewezen, maar in de ON clausule Ik verwees naar de werkelijke tabelnaam in plaats van de alias.

De Oplossing

De oplossing is dus om ervoor te zorgen dat u alle aliassen hebt toegewezen waarnaar u later in de query zou kunnen verwijzen, en ook om ervoor te zorgen dat u die aliassen rechtstreeks gebruikt in plaats van de tabelnaam.

Dus als je aliassen gaat gebruiken, zoals deze:

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

Of als u ervoor kiest om geen aliassen te gebruiken, zoals deze:

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


  1. Oracle (11.2.0.1):Hoe de rij te identificeren die momenteel wordt bijgewerkt door de UPDATE-instructie?

  2. SQLite hebben

  3. Twee kolommen in subquery in waar-clausule

  4. NIET IN vs NIET BESTAAT