Ciągle otrzymuję te błędy, gdy próbuję zaktualizować tabele na podstawie innej tabeli. W końcu przepisuję zapytanie, zmieniam kolejność złączeń, zmieniam niektóre grupy i ostatecznie to działa, ale po prostu nie do końca rozumiem.
Co to jest „identyfikator wieloczęściowy”?
Kiedy nie można powiązać „identyfikatora wieloczęściowego”?
Z czym to się wiąże?
W jakich przypadkach wystąpi ten błąd?
Jakie są najlepsze sposoby, aby temu zapobiec?
Konkretny błąd z SQL Server 2005 to:
Nie można powiązać wieloczęściowego identyfikatora „...”.
Oto przykład:
UPDATE [test].[dbo].[CompanyDetail]
SET Mnemonic = [dbBWKMigration].[dbo].[Company].[MNEMONIC],
[Company Code] = [dbBWKMigration].[dbo].[Company].[COMPANYCODE]
WHERE [Company Name] = **[dbBWKMigration].[dbo].[Company].[COMPANYNAME]**
Rzeczywisty błąd:
Msg 4104, poziom 16, stan 1, wiersz 3 Nie można powiązać wieloczęściowego identyfikatora „dbBWKMigration.dbo.Company.COMPANYNAME”.
źródło
Właściwie czasami, gdy aktualizujesz jedną tabelę z danych innej tabeli, myślę, że jednym z typowych problemów, które powodują ten błąd, jest nieprawidłowe użycie skrótów tabeli lub gdy nie są one potrzebne . Prawidłowe stwierdzenie znajduje się poniżej:
Zwróć uwagę, że
SomeField
kolumna z tabeli Table1 nie mat1
kwalifikatora jako,t1.SomeField
ale jest po prostuSomeField
.Jeśli ktoś spróbuje go zaktualizować, podając
t1.SomeField
instrukcję, zwróci wieloczęściowy błąd, który zauważyłeś.źródło
ABBREVIATION.My_Field
, kiedy tylko potrzebowałemSET.My_Field
;To prawdopodobnie literówka. Poszukaj miejsc w swoim kodzie, w których wywołujesz [schema]. [TableName] (w zasadzie wszędzie tam, gdzie odwołujesz się do pola) i upewnij się, że wszystko jest poprawnie napisane.
Osobiście staram się tego uniknąć, używając aliasów dla wszystkich moich tabel. Ogromnie pomaga, gdy można skrócić długą nazwę tabeli do akronimu jej opisu (np. WorkOrderParts -> WOP), a także sprawia, że zapytanie jest bardziej czytelne.
Edycja: jako dodatkowy bonus zaoszczędzisz TONY naciśnięć klawiszy, gdy wszystko, co musisz wpisać, to trzy- lub czteroliterowy alias w porównaniu ze schematem, tabelą i nazwami pól razem.
źródło
Binding = twoja tekstowa reprezentacja określonej kolumny jest odwzorowywana na fizyczną kolumnę w jakiejś tabeli, w jakiejś bazie danych, na jakimś serwerze.
Identyfikatorem wieloczęściowym może być: MyDatabase.dbo.MyTable. Jeśli którykolwiek z tych identyfikatorów jest nieprawidłowy, oznacza to, że masz identyfikator wieloczęściowy, którego nie można zmapować.
Najlepszym sposobem uniknięcia tego jest prawidłowe napisanie zapytania za pierwszym razem lub użycie wtyczki do studia zarządzania, która zapewnia inteligencję, a tym samym pomaga uniknąć literówek.
źródło
Prawdopodobnie masz literówkę. Na przykład, jeśli masz tabelę o nazwie Customer w bazie danych o nazwie Sales, możesz odnieść się do niej jako Sales..Customer (chociaż lepiej jest odwołać się do niej z nazwą właściciela (domyślnym właścicielem jest dbo), na przykład Sales.dbo .Klient.
Jeśli wpiszesz Sales ... Customer, być może otrzymałeś wiadomość.
źródło
Jeśli jesteś pewien, że nie jest to literówka pod względem pisowni, być może jest to literówka uwzględniająca wielkość liter.
Jakiego sortowania używasz? Sprawdź to.
źródło
Podczas aktualizowania tabel upewnij się, że nie odwołujesz się do pola podczas aktualizacji za pośrednictwem aliasu.
Właśnie wystąpił błąd z następującym kodem
Musiałem usunąć odwołanie do aliasu w instrukcji set, więc wygląda to tak
źródło
Zauważyłem, że często je dostaję, kiedy próbuję skrócić, na przykład:
Zmiana na:
Sprawia, że zapytanie działa i nie zgłasza błędu.
źródło
Kod błędu
Kod rozwiązania
jak widać w kodzie błędu
dbo.SubModule
jest już zdefiniowany jako SM ale ja używamdbo.SubModule
w następnej linii stąd wystąpił błąd. użyj zadeklarowanej nazwy zamiast rzeczywistej nazwy. Problem rozwiązany.źródło
Miałem ten problem i okazało się, że jest to nieprawidłowy alias tabeli. Rozwiązanie tego problemu rozwiązało problem.
źródło
Mój przez pomyłkę umieszczał schemat na stole Alias:
źródło
Dodanie aliasu tabeli przed polem Set powoduje ten problem w moim przypadku.
Prawa tabela aktualizacji 1 Ustaw SomeField = t2.SomeFieldValue From Table1 t1 Inner Join Table2 as t2 On t1.ID = t2.ID
Nieprawidłowa aktualizacja tabeli1 Ustaw t1.SomeField = t2.SomeFieldValue z tabeli1 t1 Inner Join Table2 as t2 On t1.ID = t2.ID
źródło
Miałem
P.PayeeName AS 'Payer' --,
i dwie linie komentarza zwróciły ten błądźródło
Właściwie zapomniałem dołączyć do stołu do innych, dlatego dostałem błąd
Miało tak być:
A nie w ten sposób:
źródło
Moją najlepszą radą w przypadku błędu jest użycie [] braquets do otaczających nazw tabel, skrót tabel powoduje czasami błędy (czasami skróty tabel po prostu działają dobrze ... dziwne)
źródło
Otrzymałem ten błąd i po prostu nie mogłem zobaczyć, gdzie jest problem. Dokładnie sprawdziłem wszystkie moje aliasy i składnię i nic nie wyglądało na niewłaściwe. Pytanie było podobne do tego, które piszę cały czas.
Postanowiłem po prostu ponownie napisać zapytanie (pierwotnie skopiowałem je z pliku raportu .rdl) poniżej, jeszcze raz i działało dobrze. Patrząc teraz na zapytania, wyglądają one tak samo, ale moje przepisane pytanie działa.
Chciałem tylko powiedzieć, że może warto spróbować, jeśli nic innego nie działa.
źródło
Po wpisaniu tabeli FROM te błędy znikną. Wpisz FROM poniżej tego, co wpisujesz, a następnie Intellisense będzie działać i będzie działać identyfikator wieloczęściowy.
źródło
Zmierzyłem się z tym problemem i rozwiązałem go, ale jest różnica między Twoim a moim kodem. Mimo to myślę, że możesz zrozumieć, co to jest „nie można powiązać wieloczęściowego identyfikatora”
Kiedy użyłem tego kodu
Napotkałem problem z identyfikatorem wieloczęściowym
ale kiedy używam pojedynczego cudzysłowu dla adresu e-mail To rozwiązane
źródło