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 intellisense
wordt 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_’ [email protected] +’ 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_’ [email protected] +’ 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 GO
gebruikt 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 products
tabel loste het probleem op. Dat wil zeggen.. met behulp van dbo.products
in plaats van alleen products
.
Antwoord 8
De volgende procedure heeft me geholpen dit probleem op te lossen, maar ik weet niet waarom.
- Knip de betreffende code uit de regels in het bericht
- Sla de zoekopdracht op (bijv. naar bestand)
- Plak de code op de plaats waar deze was
- 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.row1
en table3.row3
op 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 JOIN
Bediening 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
table2
en table3
Zijn de operanden van de JOIN
, maar de ON
clausule verwijst naar row1
, gedefinieerd in table1
. Vandaar de fout.