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.