SQL Server: недійсна назва стовпця


78

Я працюю над зміною існуючої збереженої процедури SQL Server. Я додав два нові стовпці до таблиці і змінив збережену процедуру, а також виділив ці два стовпці. Хоча стовпці доступні в таблиці, SQL Server продовжує давати цю помилку:

Недійсна назва стовпця "INCL_GSTAMOUNT"

введіть тут опис зображення

Хто-небудь може сказати мені, що тут не так?


2
Ви його виконували - Ви отримуєте цю помилку? intellisense може зайняти деякий час для оновлення?

1
Ви перекомпілювали збережену процедуру?
Локеш

Відповіді:


215

Щоразу, коли це трапляється зі мною, я натискаю Ctrl+ Shift+, Rяке оновлюється intellisense, закриваю вікно запиту (зберігаю, якщо потрібно), а потім починаю новий сеанс, який зазвичай працює досить добре.


10
Я знайшов натискання клавіші достатнім (велике спасибі!) - немає необхідності закривати вікно запиту
воробей

2
Дякую за це, це дійсно допомогло після багатогодинного стресу.
Керолайн Аллен,

1
ОЦЕ ТАК! Працював і у мене!
wakgtech

74

Також це може статися, якщо замість одинарного вводити рядок у подвійні лапки.


1
Це була причина в моєму випадку - чи можете ви пояснити причину цього
ImranNaqvi

Тьфу ... ДЯКУЮ! Такий німий. Виникла проблема із запитом діапазону дат із датами в подвійних лапках.
conner.xyz

Це рішення також стосується sybase ASE
Chexpir

При використанні подвійних лапок він аналізується як ім'я стовпця замість рядка. Якщо назва цього стовпця недоступна (рядок, як правило, не існує як стовпець), ви отримаєте цю помилку.
Джим Луц,

4

Ця помилка ТАКОЖ може траплятися в інкапсульованих операторах SQL, наприклад

ЗАЯВИТИ @tableName nvarchar (20) SET @tableName = 'GROC'

ЗАЯВИТИ @updtStmt nvarchar (4000)

SET @updtStmt = 'Оновити tbProductMaster_' + @ tableName + 'SET department_str =' + @tableName exec sp_executesql @updtStmt

Тільки для того, щоб виявити відсутність лапок, щоб інкапсулювати параметр "@tableName" далі, як показано нижче:

SET @updtStmt = 'Оновити tbProductMaster_' + @ tableName + 'SET department_str =' '' + @tableName + '' ''

Дякую


2

Intellisense не оновлюється автоматично, і ви не повинні повністю покладатися на це


2

Я просто спробував. Якщо ви виконуєте оператор для створення локальної таблиці, інструмент визнає, що назва цього стовпця існує. Просто позначте оператор генерації таблиці у вікні редактора та натисніть «Виконати».


Це рішення було єдиним, що працювало для мене. Я спробував оновити локальний кеш Intellisense, відтворити збережену програму, повторно підключитися до SQL Server, нічого не працювало, поки я просто не запустив код для створення таблиці з новою назвою стовпця, а потім змінив на впрацьоване.
Michael Bruesch

1

Я отримував ту ж помилку під час створення подання.

Уявіть собі обраний запит, який виконується без проблем:

select id
from products

Спроба створити подання з того самого запиту призведе до помилки:

create view app.foobar as
select id
from products

Повідомлення 207, рівень 16, стан 1,
стовпчик процедури, рядок 2 Недійсна назва стовпця 'id'.

Для мене це виявилося проблемою масштабу; зверніть увагу, що подання створюється в іншій схемі. Визначення схеми productsтаблиці вирішило проблему. Тобто .. використовуючи dbo.productsзамість просто products.


1

Наступна процедура допомогла мені вирішити цю проблему, але я не знаю, чому.

  1. Виріжте відповідний код, заданий рядками у повідомленні
  2. Збережіть запит (наприклад, у файл)
  3. Вставте код туди, де він був раніше
  4. Знову збережіть запит

Навіть якщо виконується той самий запит, ця помилка не виникла


У мене була подібна проблема. Я думаю, що вікно редактора зберігає тимчасові дані (наприклад, тимчасова таблиця). Можливо, ці дії комусь допоможуть 1. скинути вікно редактора 2. скинути дані (DROP TABLE #TempTable) 3. скинути SQL Server
SVPopov

1

Якщо ви збираєтеся змінити стовпець ALTER Table і негайно ОНОВИТИ таблицю, включаючи новий стовпець у тому ж сценарії . Переконайтеся, що використовуєте GOкоманду після рядка коду таблиці змін, як показано нижче.

ALTER TABLE Location 
ADD TransitionType SMALLINT NULL
GO   

UPDATE Location SET TransitionType =  4

ALTER TABLE Location 
    ALTER COLUMN TransitionType SMALLINT NOT NULL

Це спрацювало для мене. Чому це трапляється?
Nicke Manarin

0

з таблицею оновлення або закрити та відкрити SQL-сервер цю роботу


0

У мене була подібна проблема.

Проблема була в тому, що в таблиці був тригер, який писав би зміни до таблиці журналу аудиту. У таблиці журналу аудиту відсутні стовпці.


1
Вам слід детальніше розробити рішення щодо вирішення проблеми у питанні, щоб це було дійсною відповіддю. Дякую.
BogdanC

0
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

0
  • Оновіть свої столи.
  • Перезапустіть сервер SQL.
  • Зверніть увагу на орфографічні помилки в запиті.

0

Я зауважив, що при виконанні об'єднань MSSQLвикине "Недійсне ім'я стовпця", якщо таблиця, до якої ви приєднуєтесь, знаходиться поруч із таблицею, до якої ви приєднуєтесь. Я спробував вказати table1.row1та table3.row3, але все ще отримував помилку; він не зник, поки я не впорядкував таблиці у запиті. Очевидно, порядок таблиць у виписці має значення.

+-------------+    +-------------+    +-------------+    
| 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.