2014-11-17 5 views
0

Я работаю с отчетом RDL в Visual Studio 2010.Неверный синтаксис рядом?

Я пишу запрос и Refresh поле, то это приглашение "Определить параметр для запроса"

как этот

Параметр Имя | Параметр Значение

и я установить это значение

@proj | Параметры! Project.Value

затем нажмите кнопку OK

Я получаю эту ошибку

Некорректное синтаксис около '!'

Я не знаю, что такое «!» в моем запросе

Это пример мой запрос в RDL наборе

DECLARE @sqlCom NVARCHAR(MAX) 
SET @sqlCom = ' 
    SELECT name 
    FROM customer 
    WHERE id IN ('+ @proj +') 
    ' 

IF (LEN(@phoneNo) > 0) 
BEGIN 
    SET @sqlCom = @sqlCom + ' AND phoneNo LIKE ''%'[email protected]+'%'' ' 
END 

IF (LEN(@age) > 0) 
BEGIN 
    SET @sqlCom = @sqlCom + ' AND age LIKE ''%'[email protected]+'%'' ' 
END 

EXECUTE(@sqlCom) 

Зв Только @sqlCom переменная SQL @proj, @phoneNo, @age является RDL Параметры

кто-нибудь поможет мне, как решить эту проблему

Спасибо.

+2

Yikes ... это широко открыта для ввода в sql. Вы должны немедленно параметризовать свои запросы, если не раньше. Вы также должны взглянуть на эту статью, в которой объясняется ряд способов решения проблем производительности для этих типов запросов. http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/ –

+0

Мое предположение: «Неправильный синтаксис рядом с«! »- это ссылка на! в «Параметры! project.Value». Попробуйте снова выполнить запрос с жестко закодированным параметром и посмотреть, что произойдет. – Bobby

ответ

0

Проблема в том, что вам не хватает одного qoutes в '+ @proj +'. Попробуйте что-то вроде этого

DECLARE @sqlCom NVARCHAR(MAX) 
SET @sqlCom = ' 
    SELECT name 
    FROM customer 
    WHERE id IN ('''+ @proj +''') 
    ' 

IF (LEN(@phoneNo) > 0) 
BEGIN 
    SET @sqlCom = @sqlCom + ' AND phoneNo LIKE ''%'[email protected]+'%'' ' 
END 

IF (LEN(@age) > 0) 
BEGIN 
    SET @sqlCom = @sqlCom + ' AND age LIKE ''%'[email protected]+'%'' ' 
END 

EXECUTE(@sqlCom) 
+0

Спасибо за ваш ответ, я могу это исправить –

Смежные вопросы