Ich erhalte diese Fehler ständig, wenn ich versuche, Tabellen basierend auf einer anderen Tabelle zu aktualisieren. Am Ende schreibe ich die Abfrage neu, ändere die Reihenfolge der Verknüpfungen, ändere einige Gruppierungen und dann funktioniert es schließlich, aber ich verstehe es einfach nicht ganz.
Was ist eine mehrteilige Kennung?
Wann kann eine mehrteilige Kennung nicht gebunden werden?
Woran ist es überhaupt gebunden?
In welchen Fällen tritt dieser Fehler auf?
Was sind die besten Möglichkeiten, um dies zu verhindern?
Der spezifische Fehler von SQL Server 2005 lautet:
Die mehrteilige Kennung "..." konnte nicht gebunden werden.
Hier ist ein Beispiel:
UPDATE [test].[dbo].[CompanyDetail]
SET Mnemonic = [dbBWKMigration].[dbo].[Company].[MNEMONIC],
[Company Code] = [dbBWKMigration].[dbo].[Company].[COMPANYCODE]
WHERE [Company Name] = **[dbBWKMigration].[dbo].[Company].[COMPANYNAME]**
Der eigentliche Fehler:
Nachricht 4104, Ebene 16, Status 1, Zeile 3 Die mehrteilige Kennung "dbBWKMigration.dbo.Company.COMPANYNAME" konnte nicht gebunden werden.
quelle
Tatsächlich ist es manchmal, wenn Sie eine Tabelle aus den Daten einer anderen Tabelle aktualisieren, eines der häufigsten Probleme, die diesen Fehler verursachen, wenn Sie Ihre Tabellenabkürzungen falsch verwenden oder wenn sie nicht benötigt werden . Die richtige Aussage ist unten:
Beachten Sie, dass die
SomeField
Spalte aus Tabelle1 nicht dast1
Qualifikationsmerkmal as hat,t1.SomeField
sondern nurSomeField
.Wenn man versucht, es durch Angabe
t1.SomeField
der Anweisung zu aktualisieren, wird der mehrteilige Fehler zurückgegeben, den Sie bemerkt haben.quelle
ABBREVIATION.My_Field
, als ich es gerade brauchteSET.My_Field
;Es ist wahrscheinlich ein Tippfehler. Suchen Sie in Ihrem Code nach den Stellen, an denen Sie [Schema] aufrufen. [Tabellenname] (im Grunde überall dort, wo Sie auf ein Feld verweisen) und stellen Sie sicher, dass alles richtig geschrieben ist.
Persönlich versuche ich dies zu vermeiden, indem ich Aliase für alle meine Tabellen verwende. Es ist enorm hilfreich, wenn Sie einen langen Tabellennamen auf ein Akronym seiner Beschreibung (z. B. WorkOrderParts -> WOP) kürzen können, und macht Ihre Abfrage besser lesbar.
Bearbeiten: Als zusätzlichen Bonus sparen Sie Tonnen von Tastenanschlägen, wenn Sie lediglich einen Alias mit drei oder vier Buchstaben im Vergleich zu den Namen von Schema, Tabelle und Feld eingeben müssen.
quelle
Bindung = Ihre Textdarstellung einer bestimmten Spalte wird einer physischen Spalte in einer Tabelle, in einer Datenbank oder auf einem Server zugeordnet.
Die mehrteilige Kennung könnte sein: MyDatabase.dbo.MyTable. Wenn Sie einen dieser Bezeichner falsch verstehen, haben Sie einen mehrteiligen Bezeichner, der nicht zugeordnet werden kann.
Der beste Weg, dies zu vermeiden, besteht darin, die Abfrage gleich beim ersten Mal richtig zu schreiben oder ein Plugin für Management Studio zu verwenden, das Intellisense bereitstellt und Ihnen so hilft, Tippfehler zu vermeiden.
quelle
Sie haben wahrscheinlich einen Tippfehler. Wenn Sie beispielsweise eine Tabelle mit dem Namen Customer in einer Datenbank mit dem Namen Sales haben, können Sie diese als Sales..Customer bezeichnen (obwohl es besser ist, sie mit dem Eigentümernamen (dbo ist der Standardeigentümer) wie Sales.dbo zu bezeichnen .Kunde.
Wenn Sie Sales ... Customer eingegeben haben, haben Sie möglicherweise die Nachricht erhalten, die Sie erhalten haben.
quelle
Wenn Sie sicher sind, dass es sich nicht um einen Tippfehler handelt, handelt es sich möglicherweise um einen Tippfehler.
Welche Zusammenstellung verwenden Sie? Prüfen Sie.
quelle
Stellen Sie beim Aktualisieren von Tabellen sicher, dass Sie nicht auf das Feld verweisen, das Sie über den Alias aktualisieren.
Ich hatte gerade den Fehler mit dem folgenden Code
Ich musste die Alias-Referenz in der set-Anweisung entfernen, damit sie so lautet
quelle
Ich habe festgestellt, dass ich diese häufig bekomme, wenn ich versuche, sie abzukürzen, wie zum Beispiel:
Ändern zu:
Lässt die Abfrage funktionieren und wirft den Fehler nicht aus.
quelle
Ich hatte dieses Problem und es stellte sich heraus, dass es sich um einen falschen Tabellenalias handelte. Durch Beheben dieses Problems wurde das Problem behoben.
quelle
Meins hat das Schema versehentlich auf den Tisch gelegt. Alias:
quelle
Das Hinzufügen eines Tabellenalias im vorderen Set-Feld verursacht in meinem Fall dieses Problem.
Rechts Update Table1 Set SomeField = t2.SomeFieldValue From Table1 t1 Inner Join Table2 als t2 On t1.ID = t2.ID.
Falsche Aktualisierung Tabelle1 Setzen Sie t1.SomeField = t2.SomeFieldValue aus Tabelle1 t1 Inner Join Table2 als t2 On t1.ID = t2.ID.
quelle
Ich hatte
P.PayeeName AS 'Payer' --,
und die beiden Kommentarzeilen warfen diesen Fehlerquelle
Ich habe tatsächlich vergessen, den Tisch mit den anderen zu verbinden, deshalb habe ich den Fehler bekommen
Angeblich so:
Und nicht so:
quelle
Fehlercode
Lösungscode
Wie Sie sehen können, ist der Fehlercode
dbo.SubModule
bereits als SM definiert, aber ich verwende ihndbo.SubModule
in der nächsten Zeile, daher ist ein Fehler aufgetreten. Verwenden Sie den deklarierten Namen anstelle des tatsächlichen Namens. Problem gelöst.quelle
Mein bester Rat, wenn der Fehler auftritt, ist die Verwendung von [] Klammern, um Tabellennamen zu umgeben. Die Abkürzung von Tabellen verursacht manchmal Fehler (manchmal funktionieren Tabellenabkürzungen einfach gut ... seltsam).
quelle
Ich habe diesen Fehler erhalten und konnte einfach nicht sehen, wo das Problem lag. Ich habe alle meine Aliase und Syntax überprüft und nichts sah fehl am Platz aus. Die Abfrage ähnelte denen, die ich die ganze Zeit schreibe.
Ich habe mich entschlossen, die Abfrage (ich hatte sie ursprünglich aus einer .rdl-Berichtsdatei kopiert) unten erneut zu schreiben, und sie lief einwandfrei. Wenn ich mir jetzt die Abfragen ansehe, sehen sie für mich gleich aus, aber meine neu geschriebene funktioniert.
Ich wollte nur sagen, dass es einen Versuch wert sein könnte, wenn nichts anderes funktioniert.
quelle
Wenn Sie die FROM-Tabelle eingeben, verschwinden diese Fehler. Geben Sie FROM unterhalb Ihrer Eingabe ein, dann funktioniert Intellisense und die mehrteilige Kennung funktioniert.
quelle
Ich habe mich diesem Problem gestellt und es gelöst, aber es gibt einen Unterschied zwischen Ihrem und meinem Code. Trotzdem denke ich, dass Sie verstehen können, was "der mehrteilige Bezeichner konnte nicht gebunden werden" ist.
Als ich diesen Code verwendet habe
Ich hatte ein Problem mit der mehrteiligen Kennung
aber wenn ich ein einfaches Anführungszeichen für die E-Mail-Adresse verwende, ist es gelöst
quelle