Наличие некоторых проблем с динамическим SQL с типом INT - PullRequest
0 голосов
/ 06 августа 2009

Здравствуйте, я использую SQL2000, поэтому я строю динамический запрос, и в последнем случае у меня есть это:

 IF (@apepac is not null and @nompac is not null and @month is not null )
    SELECT @DynaSQL_1= @DynaSQL_1 + ' AND PACIENTE.apellidos like ''' + @apepac + '%'''+
                                    ' AND PACIENTE.nombres like ''' + @nompac + '%'''+
                                    ' AND DATENAME(MONTH,honorariotecnologo.fechaestudio) = ''' + @month +'''' +
                                    ' AND YEAR(honorariotecnologo.fechaestudio) = '+@year+''

поэтому параметр @year объявлен следующим образом:

DECLARE @year int,

и ошибка, которую я получаю из вывода SQL:

Msg 245, Level 16, State 1, Line syntax 
43Error to convert the nvarchar value '

Что может быть не так?

Спасибо!

Кстати, почему, если параметр объявлен как INT, в запросе тела он должен быть приведен / преобразован? ...

Ответы [ 3 ]

1 голос
/ 06 августа 2009

Вам нужно привести свое @ Year как символьное значение.

Попробуйте это:

' AND YEAR(honorariotecnologo.fechaestudio) = ' + CAST(@year AS varchar(10))  
1 голос
/ 06 августа 2009

Вы хотите, чтобы это позаботилось об ошибке преобразования ...

' AND YEAR(honorariotecnologo.fechaestudio) = '+CAST(@year AS VARCHAR)

Вы хотите это, если хотите добавить одинарную кавычку в конец вашей строки.

' AND YEAR(honorariotecnologo.fechaestudio) = '+CAST(@year AS VARCHAR) + ''''
1 голос
/ 06 августа 2009

Вы должны разыграть или преобразовать INT в NVARCHAR. Google CAST CONVERT TSQL.

...