2016-05-25 6 views
1

Я хочу прикрепить числовое значение в динамическом запросе, но Я получаю сообщение об ошибке:Динамический SQL-запрос, где условие

Conversion failed when converting the varchar value ' + @psRegionCode + ' to data type smallint

Мой запрос:

SET @psRegionCode = UPPER(LTRIM(RTRIM(@psRegionCode))) 

IF (@psRegionCode <> 0) 
BEGIN 
    SET @sSQLStr = @sSQLStr + ' ' + 'AND reg.region_cd = ''' + @psRegionCode + '''' 
END 

Вещи, которые я пробовал:

SET @psRegionCode = UPPER(LTRIM(RTRIM(@psRegionCode))) 
IF (@psRegionCode <> 0) 
BEGIN 
    SET @sSQLStr = @sSQLStr + ' ' + 
     'AND reg.region_cd = ' + cast(@psRegionCode as nvarchar(10) '' 
END 

Может кто-нибудь, пожалуйста, помогите мне с этим?

+1

Какая СУБД для этого? Добавьте тег, чтобы указать, используете ли вы 'mysql',' postgresql', 'sql-server',' oracle' или 'db2' - или что-то еще. –

+1

@marc_s я добавил дополнительный тег sqlserver – mandes

ответ

2
IF (@psRegionCode <> 0) 
BEGIN 
    SET @sSQLStr = @sSQLStr + 
     ' AND reg.region_cd = ' + cast(@psRegionCode as nvarchar(10)) 
  1. вы должны убедиться, что у вас есть нужное количество апострофов

  2. если @psRegionCode это число, то почему вы LTrim это? если это строка, почему вы ее бросили?

+0

Это была строка ранее – mandes

+0

Итак, теперь вам не нужен первый оператор, если он не является строкой. Работает ли динамический sql? –

+0

, даже если я удалю, что все еще получаю ту же ошибку – mandes

2

Ну, по вашему синтаксису я предполагаю SQL-Server? В любом случае, я думаю, что ваш второй запрос должен работать, вы просто не хватает скобку:

IF (@psRegionCode <> 0) 
BEGIN 
    SET @sSQLStr = @sSQLStr + 
     ' AND reg.region_cd = ' + cast(@psRegionCode as nvarchar(10)) 
END 

Вы не можете Concat число в строку без преобразования.

+0

есть проблема с ' –

+0

все еще сталкивается с той же проблемой – mandes

+0

Какой тип '@ psRegionCode'? – sagi

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