Wpadłem w impas. Mam zapytanie, które jest generowane przez jakiś C#
kod. Zapytanie działa dobrze, Microsoft SQL Server Management Studio
gdy jest uruchamiane w tej samej bazie danych.
Jednak gdy mój kod próbuje uruchomić to samo zapytanie, pojawia się ten sam błąd dotyczący nieprawidłowej kolumny i zgłaszany jest wyjątek. Wszystkie zapytania odwołujące się do tej kolumny kończą się niepowodzeniem.
Kwestionowana kolumna została niedawno dodana do bazy danych. Jest to kolumna z datą o nazwie Incident_Begin_Time_ts
.
Przykład, który się nie udaje:
select * from PerfDiag
where Incident_Begin_Time_ts > '2010-01-01 00:00:00';
Inne zapytania, takie jak Select MAX(Incident_Being_Time_ts);
również kończą się niepowodzeniem, gdy są uruchamiane w kodzie, ponieważ uważa, że brakuje kolumny.
Jakieś pomysły?
sql
sql-server
kidl33t
źródło
źródło
Odpowiedzi:
Podejrzewam, że masz dwie tabele o tej samej nazwie. Jeden jest własnością schematu „dbo” (
dbo.PerfDiag
), a drugi jest własnością domyślnego schematu konta używanego do łączenia się z serwerem SQL (coś w rodzajuuserid.PerfDiag
).Jeśli masz niekwalifikowane odwołanie do obiektu schematu (takiego jak tabela) - takie, które nie jest kwalifikowane przez nazwę schematu - odwołanie do obiektu musi zostać rozwiązane. Rozpoznawanie nazw odbywa się poprzez wyszukiwanie w następującej kolejności obiektu odpowiedniego typu (tabeli) o określonej nazwie. Nazwa odnosi się do pierwszego dopasowania:
Niekwalifikowane odniesienie jest powiązane z pierwszym dopasowaniem w powyższej sekwencji.
Jako ogólną zalecaną praktykę należy zawsze kwalifikować odwołania do obiektów schematu, ze względu na wydajność:
Niekwalifikowane odwołanie może unieważnić buforowany plan wykonania procedury składowanej lub zapytania, ponieważ schemat, do którego odwołanie zostało powiązane, może ulec zmianie w zależności od poświadczeń wykonujących procedurę składowaną lub zapytanie. Powoduje to rekompilację kwerendy / procedury składowanej, wpływ na wydajność. Ponowna kompilacja powoduje usunięcie blokad kompilacji, uniemożliwiając innym dostęp do potrzebnych zasobów.
Rozpoznawanie nazw spowalnia wykonywanie zapytania, ponieważ należy wykonać dwie sondy, aby znaleźć prawdopodobną wersję obiektu (należącą do „dbo”). To jest zwykły przypadek. Jedynym przypadkiem, w którym pojedyncza sonda rozwiąże nazwę, jest sytuacja, gdy bieżący użytkownik jest właścicielem obiektu o określonej nazwie i typie.
[Zredagowano do dalszych uwag]
Inne możliwości to (w przypadkowej kolejności):
Dokładnie sprawdź ciągi połączeń i upewnij się, że jawnie określają nazwę wystąpienia programu SQL Server i nazwę bazy danych.
źródło
Po prostu naciśnij Ctrl+ Shift+ Ri zobacz ...
W SQL Server Management Studio Ctrl + Shift + R odświeża lokalną pamięć podręczną.
źródło
Jeśli wykonujesz to w ramach transakcji i instrukcja SQL przed usunięciem / zmianą tabeli, możesz również otrzymać ten komunikat.
źródło
Ostatecznie zamknąłem i ponownie uruchomiłem Microsoft SQL Server Management Studio; i to naprawiło to dla mnie. Ale w innych przypadkach wystarczyło samo rozpoczęcie nowego okna zapytania.
źródło
Jeśli używasz zmiennych o tej samej nazwie co Twoja kolumna, może to oznaczać, że zapomniałeś znacznika zmiennej „@”. W instrukcji INSERT zostanie wykryty jako kolumna.
źródło
Miałem dokładnie ten sam problem. Zmieniłem nazwy niektórych kolumn z aliasami w tabeli tymczasowej, która jest dalej używana przez inną część tego samego kodu. Z jakiegoś powodu nie zostało to przechwycone przez SQL Server Management Studio i skarżyło się na nieprawidłowe nazwy kolumn.
Po prostu utworzyłem nowe zapytanie, skopiowałem wklej kod SQL ze starego zapytania do nowego zapytania i uruchomiłem je ponownie. Wydawało się, że poprawnie odświeżyło to środowisko.
źródło
W moim przypadku ponownie uruchamiam Microsoft SQL Sever Management Studio i to działa dobrze dla mnie.
źródło
W moim przypadku próbowałem uzyskać wartość z niewłaściwego zestawu wyników podczas odpytywania wielu instrukcji SQL.
źródło
W moim przypadku wydaje się, że problemem był dziwny problem z buforowaniem. Powyższe rozwiązania nie zadziałały.
Jeśli twój kod działał poprawnie i dodałeś kolumnę do jednej ze swoich tabel i daje to błąd `` nieprawidłowa nazwa kolumny '', a powyższe rozwiązania nie działają, spróbuj tego: Najpierw uruchom tylko sekcję kodu do utworzenia zmodyfikowanej table, a następnie uruchom cały kod.
źródło
Uwzględniam tę odpowiedź, ponieważ był to najwyższy wynik dla zapytania „nieprawidłowa nazwa kolumny sql” w Google i nie widziałem tutaj tej odpowiedzi. W moim przypadku otrzymywałem nieprawidłową nazwę kolumny, Id1, ponieważ użyłem niewłaściwego identyfikatora w mojej instrukcji .HasForeignKey w moim kodzie Entity Framework C #. Gdy zmieniłem go, aby pasował do identyfikatora obiektu .HasOne (), błąd zniknął.
źródło
Otrzymałem ten błąd podczas uruchamiania funkcji skalarnej przy użyciu wartości tabeli, ale w klauzuli Select w mojej funkcji skalarnej RETURN brakowało części „FROM table”. : facepalms:
źródło
Dzieje się również, gdy zapomnisz zmienić ConnectionString i poprosisz tabelę, która nie ma pojęcia o zmianach, które wprowadzasz lokalnie.
źródło