Странная ошибка «Неверное имя столбца» при выполнении SP - PullRequest
0 голосов
/ 25 июня 2009

У нас есть SP, в котором мы строим запрос, а затем выполняем запрос с помощью вызова exec(@select), где переменная, которая содержит SQL-запрос в том виде, как он построен, равна @select.

Мне был назначен запрос на добавление нового столбца в набор результатов, возвращенный SP. Этот новый столбец не должен возвращаться при любых обстоятельствах, но только при определенных условиях. Естественно, я добавил следующий код в SP.

IF @conditionIsMet
BEGIN
set @select =  @select + ", 'compQty' = convert(varchar(53), di.qty) "
END

Это работало нормально до сегодняшнего дня, когда мое приложение продолжает выдавать исключение SQL с сообщением "Недопустимое имя столбца: compQty". Это ошибочно, и исключение не всегда выбрасывается.

Выполнение SP в SQL Server Management Studio не дает ошибок. Столбец отображается с заголовком «compQty». Таким образом, приложение должно поднять столбец, но это не похоже на !!

Может ли кто-нибудь помочь?

Ответы [ 4 ]

1 голос
/ 16 июля 2009

Относится к проблеме Quoted Identifier, которую @Tapori идентифицировал: если сохраненный процесс выглядит следующим образом:

CREATE PROCEDURE [dbo].[usp_Something]
AS
   SET QUOTED_IDENTIFIER OFF

   DECLARE @select NVARCHAR(200)

   SET @select = 'SELECT * FROM table WHERE ''col1'' = 42'
GO

Тогда у тебя будут проблемы. Проблема заключается в том, что настройка QUOTED_IDENTIFIER не имеет значения, когда выполняется хранимый процесс, а имеет значение, когда сохраненный процесс создан . Так что вам действительно нужно сделать:

SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[usp_Something]
AS
   DECLARE @select NVARCHAR(200)

   SET @select = 'SELECT * FROM table WHERE ''col1'' = 42'
GO

И посмотри, что это делает.

1 голос
/ 25 июня 2009

Не заключать имя столбца в одинарные кавычки 'compQty '

0 голосов
/ 11 февраля 2015

Если у вас одна и та же таблица в нескольких схемах, вы можете столкнуться с

Неверное имя столбца

Решение: явное определение схемы: [schemaName].[tableName]

0 голосов
/ 25 июня 2009

Мне кажется, что здесь кавычки - это проблема.

Похоже, что в вашей среде был изменен параметр для указанных в кавычках идентификаторов, и это вызвало исключение. Используйте это в начале вашего запроса:

Установить Quoted_Identifier OFF;

Изменить: Иногда вы сталкиваетесь с проблемой, а иногда нет, потому что ваше условие ЕСЛИ не всегда выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...