SQL-server: ongeldige kolomnaam

Ik ben bezig met het wijzigen van de bestaande SQL Server Stored Procedure. Ik heb twee nieuwe kolommen aan de tabel toegevoegd en ook de opgeslagen procedure gewijzigd om deze twee kolommen ook te selecteren. Hoewel de kolommen beschikbaar zijn in de tabel, blijft SQL Server deze fout geven:

Ongeldige kolomnaam ‘INCL_GSTAMOUNT’

Kan iemand me alsjeblieft vertellen wat hier mis is?


Antwoord 1, autoriteit 100%

Als mij dit overkomt, druk ik op Ctrl+Shift+Rwaardoor intellisensewordt vernieuwd, sluit de queryvenster (opslaan indien nodig), start dan een nieuwe sessie die meestal vrij goed werkt.


Antwoord 2, autoriteit 35%

Dit kan ook gebeuren als u een tekenreeks tussen dubbele aanhalingstekens plaatst in plaats van enkele.


Antwoord 3, autoriteit 2%

Deze fout kan OOK voorkomen in ingekapselde SQL-instructies, bijvoorbeeld

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

VERKLAREN @updtStmt nvarchar(4000)

SET @updtStmt = ‘Update tbProductMaster_’ +@tableName +’ SET
afdeling_str = ‘ + @tableName exec sp_executesql @updtStmt

Alleen om te ontdekken dat er citaten ontbreken om de parameter “@tableName” verder in te kapselen, zoals het volgende:

SET @updtStmt = ‘Update tbProductMaster_’ +@tableName +’ SET
afdeling_str = ”’ + @tableName + ”’ ‘

Bedankt


Antwoord 4, autoriteit 2%

Als u de tabelkolom ALTERgaat onmiddellijk UPDATEde tabel inclusief de nieuwe kolom in het hetzelfde script. Zorg ervoor dat u de opdracht GOgebruikt na de coderegel van de wijzigingstabel, zoals hieronder.

ALTER TABLE Location 
ADD TransitionType SMALLINT NULL
GO   
UPDATE Location SET TransitionType =  4
ALTER TABLE Location 
    ALTER COLUMN TransitionType SMALLINT NOT NULL

Antwoord 5

Intellisense wordt niet automatisch vernieuwd en daar moet u niet volledig op vertrouwen


Antwoord 6

Ik heb het net geprobeerd.
Als u de instructie uitvoert om uw lokale tabel te genereren, accepteert de tool dat deze kolomnaam bestaat.
Markeer gewoon de tabelgeneratie-instructie in uw editorvenster en klik op uitvoeren.


Antwoord 7

Ik kreeg dezelfde fout bij het maken van een weergave.

Stel je een selectiequery voor die probleemloos wordt uitgevoerd:

select id
from products

Een poging om een weergave te maken van dezelfde zoekopdracht zou een fout opleveren:

create view app.foobar as
select id
from products

Bericht 207, niveau 16, staat 1, procedure foobar, regel 2
Ongeldige kolomnaam ‘id’.

Voor mij bleek het een scopingkwestie te zijn; let op de weergave wordt gemaakt in een ander schema. Het specificeren van het schema van de productstabel loste het probleem op. Dat wil zeggen.. met behulp van dbo.productsin plaats van alleen products.


Antwoord 8

De volgende procedure heeft me geholpen dit probleem op te lossen, maar ik weet niet waarom.

  1. Knip de betreffende code uit de regels in het bericht
  2. Sla de zoekopdracht op (bijv. naar bestand)
  3. Plak de code op de plaats waar deze was
  4. Sla de zoekopdracht opnieuw op

Zelfs als het dezelfde query lijkt te zijn, heeft deze deze fout niet gegenereerd


Antwoord 9

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

Antwoord 10

met verversingstabel of sluit en open sql-server dit werk


Antwoord 11

Ik had een soortgelijk probleem.

Het probleem was dat er een trigger op de tafel was die wijzigingen naar een controlelogboektabel zou schrijven. Er ontbraken kolommen in de controlelogboektabel.


Antwoord 12

  • Ververs uw tabellen.
  • Herstart de SQL-server.
  • Let op de spelfouten in Query.

Antwoord 13

Ik merkte op dat, bij het uitvoeren van joins, MSSQL“Ongeldige kolomnaam” zal gooien als de tafel waaraan u deelneemt niet naast de tafel staat waaraan u deelneemt. Ik heb geprobeerd table1.row1en table3.row3op te geven, maar kreeg nog steeds de foutmelding; het ging niet weg totdat ik de tabellen in de query opnieuw ordende. Blijkbaar is de volgorde van de tabellen in de verklaring van belang.

+-------------+    +-------------+    +-------------+    
| 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

Antwoord 14

Niet genoeg vertegenwoordiger om commentaar te geven, dus ik zal een nieuw antwoord schrijven, re: antwoord van Nick Reed met betrekking tot het bestellen van de tabellen in de query .

De JOINBediening heeft twee operanden. In de ON-clausule kan men alleen verwijzen naar kolommen van die operanden. In het eerste voorbeeld van Nick,

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

table2en table3Zijn de operanden van de JOIN, maar de ONclausule verwijst naar row1, gedefinieerd in table1. Vandaar de fout.

Other episodes