SQL Server: Nume de coloană invalid (Programare, Sql, Server Sql, Sql Server 2008, Proceduri Stocate)

Kamran Ahmed a intrebat.

Lucrez la modificarea procedurii stocate SQL Server existente. Am adăugat două coloane noi în tabel și am modificat procedura stocată pentru a selecta și aceste două coloane. Deși coloanele sunt disponibile în tabel, SQL Server continuă să dea această eroare:

Nume de coloană invalid „INCL_GSTAMOUNT

Îmi poate spune cineva ce este în neregulă aici?

Comentarii

  • Ați executat-o – primiți această eroare? intellisense poate dura ceva timp pentru a se actualiza? – utilizator359135
  • ați recompilat procedura stocată? –  > Por Lokesh.
13 răspunsuri
Ric

De fiecare dată când mi se întâmplă acest lucru, apăs Ctrl+Shift+R care reîmprospătează intellisense, , închideți fereastra de interogare (salvați dacă este necesar), apoi începeți o nouă sesiune care, de obicei, funcționează destul de bine.

Comentarii

  • Am constatat că este suficientă această combinație de taste (mulțumiri excelente!) – nu este nevoie să închideți fereastra de interogare –  > Por vrabia.
  • Vă mulțumesc pentru acest lucru a ajutat cu adevărat după ore de stres. –  > Por Caroline Allen.
  • WOW! A funcționat și pentru mine! –  > Por wakgtech.
Harry

S-ar putea întâmpla și dacă se pune șirul de caractere în ghilimele duble în loc de simple.

Comentarii

  • Acesta a fost motivul în cazul meu – puteți explica motivul pentru acest lucru?  > Por ImranNaqvi.
  • Ugh… MULȚUMESC! Atât de prost. Am avut această problemă cu interogarea pentru intervalul de date cu date în ghilimele duble. –  > Por conner.xyz.
  • Această soluție se aplică, de asemenea, la sybase ASE –  > Por Chexpir.
  • Când se utilizează ghilimele duble, este analizat ca un nume de coloană în loc de un șir de caractere. Dacă acel nume de coloană nu este disponibil (un șir de caractere de obicei nu există ca o coloană), veți primi această eroare. –  > Por Jim Lutz.
Chagbert

Această eroare poate apărea, de asemenea, în declarațiile SQL încapsulate, de ex.

DECLARE @tableName nvarchar(20) SET @tableName = ‘GROC’

DECLARE @updtStmt nvarchar(4000)

SET @updtStmt = „Update tbProductMaster_’ [email protected] +’ SET department_str = ‘ + @tableName exec sp_executesql @updtStmt

Doar pentru a descoperi că lipsesc ghilimelele care să încapsuleze parametrul „@tableName” mai departe, cum ar fi următoarele:

SET @updtStmt = „Update tbProductMaster_” [email protected] +’ SET department_str = ”” + @tableName + ””

Mulțumiri

Madhivanan

Intellisense nu este actualizat automat și nu trebuie să vă bazați pe el în totalitate.

Anderas

Tocmai am încercat.Dacă executați instrucțiunea pentru a genera tabelul local, instrumentul va accepta că acest nume de coloană există.Marcați doar instrucțiunea de generare a tabelului în fereastra editorului și faceți clic pe Executare.

Comentarii

  • Această soluție a fost singura care a funcționat pentru mine. Am încercat să reîmprospătez memoria cache locală Intellisense, să recreez Stored Proc, să mă reconectez la SQL Server, nimic nu a funcționat până când nu am executat codul de creare a tabelului cu un nou nume de coloană, apoi schimbarea la inserare a funcționat. –  > Por Michael Bruesch.
dush88c

Dacă aveți de gând să ALTER Coloana tabelului și UPDATE imediat tabelul, inclusiv noua coloană în același script. Asigurați-vă că utilizați GO după linia de cod a modificării tabelului, așa cum se arată mai jos.

ALTER TABLE Location 
ADD TransitionType SMALLINT NULL
GO   

UPDATE Location SET TransitionType =  4

ALTER TABLE Location 
    ALTER COLUMN TransitionType SMALLINT NOT NULL

Comentarii

  • Asta a funcționat pentru mine. De ce se întâmplă acest lucru? –  > Por Nicke Manarin.
Molomby

Am primit aceeași eroare la crearea unei vizualizări.

Imaginați-vă o interogare select care se execută fără probleme:

select id
from products

Încercarea de a crea o vizualizare din aceeași interogare ar produce o eroare:

create view app.foobar as
select id
from products

Msg 207, Level 16, State 1, Procedure foobar, Line 2
Nume de coloană „id” nevalabil.

În cazul meu, s-a dovedit a fi o problemă de domeniu de aplicare; rețineți că vizualizarea este creată într-o schemă diferită. Specificând schema din products tabelă a rezolvat problema. Adică… folosind dbo.products în loc de doar products.

Dreanaught

Următoarea procedură m-a ajutat să rezolv această problemă, dar nu știu de ce.

  1. Tăiați codul în cauză dat de liniile din mesaj
  2. Salvați interogarea (de exemplu, în fișier)
  3. Lipiți codul în locul în care era înainte
  4. Salvați din nou interogarea

Chiar dacă pare a fi aceeași interogare care se execută, nu a mai dat această eroare

Comentarii

  • Am avut o problemă similară. Cred că o fereastră de editare salvează date temporare (exp. tabel temporar). Poate acești pași ajută pe cineva 1. resetați fereastra editorului 2. resetați datele (DROP TABLE #TempTable) 3. resetați SQL Server –  > Por SVPopov.
Junior Placido
There can be many things:
First attempt, make a select of this field in its source table;
Check the instance of the sql script window, you may be in a different instance;
Check if your join is correct;
Verify query ambiguity, maybe you are making a wrong table reference
Of these checks, run the T-sql script again

[Image of the script SQL][1]
  [1]: https://i.stack.imgur.com/r59ZY.png`enter code here

behzad

cu reîmprospătarea tabelului sau închideți și deschideți serverul sql acest lucru funcționează

William Monahan

Am avut o problemă similară.

Problema a fost că exista un declanșator pe tabel care ar fi scris modificările într-un tabel de jurnal de audit. Coloanele lipseau din tabelul de jurnal de audit.

Comentarii

  • Trebuie să elaborați mai multe despre o soluție de rezolvare a problemei din întrebare pentru ca acesta să fie un răspuns valid. Vă mulțumim. –  > Por BogdanC.
Khizer Amin
  • Reîmprospătați-vă tabelele.
  • Reporniți serverul SQL.
  • Fiți atenți la greșelile de ortografie din Query.

Nick Reed

Am observat că, la executarea îmbinărilor, MSSQL va arunca „Invalid Column Name” (Nume de coloană invalid) dacă tabelul la care vă alăturați nu este alături de tabelul la care vă alăturați. Am încercat să precizez table1.row1 și table3.row3, , dar tot primeam eroarea; aceasta nu a dispărut până când nu am reordonat tabelele din interogare. Se pare că ordinea tabelelor din declarație contează.

+-------------+    +-------------+    +-------------+    
| table1      |    | table2      |    | table3      |    
+-------------+    +-------------+    +-------------+    
| row1 | col1 |    | row2 | col2 |    | row3 | col3 |    
+------+------+    +------+------+    +------+------+    
| ...  | ...  |    | ...  | ...  |    | ...  | ...  |    
+------+------+    +------+------+    +------+------+    

SELECT * FROM table1, table2 LEFT JOIN table3 ON row1 = row3; --throws an error
SELECT * FROM table2, table1 LEFT JOIN table3 ON row1 = row3; --works as expected