2015-05-28 4 views
2

У меня ниже SPROC, в котором я передаю имя столбца (значение) вместе с другими параметрами (Место, Сценарий).Как передать имя столбца вместе с другими параметрами

ALTER PROCEDURE [dbo].[up_GetValue] 

    @Value varchar(20), @Place varchar(10),@Scenario varchar(20), @Number varchar(10) 
AS BEGIN 
    SET NOCOUNT ON; 
    DECLARE @SQLquery AS NVARCHAR(MAX) 
    set @SQLquery = 'SELECT ' + @Value + ' from PDetail where Place = ' + @Place + ' and Scenario = ' + @Scenario + ' and Number = ' + @Number 

    exec sp_executesql @SQLquery 

END 
GO 

при выполнении: EXEC [DBO] [up_GetValue] 'Service', 'HOME', 'Агент', '123697'

я получаю ниже Сообщ ошибки

Invalid Column. имя 'HOME'. Недопустимое имя столбца «Агент».

Нужно ли добавить что-нибудь в sproc ??

+0

Предполагаются ли они строковыми значениями для полей или именами других полей, по которым вы сравниваете поля «Место», «Сценарий» и «Число»? Кроме того, не MySQL. – Uueerdo

ответ

1

Во-первых: вы отметили свой вопрос как mysql, но я думаю, что ваш код является MSSQL.

An yway, ваша проблема заключается в том, что вам нужно добавить кавычки вокруг каждого параметра, зависящего от строки.

Как это:

alter PROCEDURE [dbo].[up_GetValue] 
    @Value varchar(20), @Place varchar(10),@Scenario varchar(20), @Number varchar(10) 
AS BEGIN 
    SET NOCOUNT ON; 
    DECLARE @SQLquery AS NVARCHAR(MAX) 
    set @SQLquery = 'SELECT ' + QUOTENAME(@Value) + ' from PDetail where Place = ''' + @Place + ''' and Scenario = ''' + @Scenario + ''' and Number = ''' + @Number +'''' 
    print @SQLquery 
    exec sp_executesql @SQLquery 

END 
GO 

Обновление:

Используйте QUOTENAME, чтобы убедиться, что он работает.

QUOTENAME:

Возвращает строку Unicode с разделителями добавленными, чтобы строка ввода является допустимым SQL Server с разделителями идентификатор.

+0

получение неверного синтаксиса рядом с ключевым словом 'from'. – user190881

+0

Вы приняли мой ответ, это сработало? или по-прежнему получать неправильный синтаксис? –

+0

Его работая fine.Thanks – user190881

0

Вы должны процитировать имена столбцов с `(кавычка) и строковые значения с»

set @SQLquery = 'SELECT `' + @Value + '` from PDetail where Place = "' + @Place + '" and Scenario = "' + @Scenario + '" and Number = ' + @Number 
+0

Получение неверного синтаксиса рядом с ''. – user190881

+0

Оставьте «», а затем выключите. К сожалению, это был MySQL ... – marekful

0

Попробуйте использовать подготовленное заявление вместо concatinating строку

Пример:..

PREPARE stmt1 FROM 'SELECT ? from PDetail where Place = ? and Scenario = ? and Number = ?; 
EXECUTE stmt1 USING @Value, @Place, @Scenario, @Number; 
Смежные вопросы