2011-12-10 14 views
5

我試圖連接數據庫的字符串值,但是在此聲明:SQL服務器+動態查詢+'數據類型nvarchar和位在添加操作符中不兼容。'

SET @sql = ('select' + @var1 + '+' + convert(varchar,@var2) + 
      'from [VoucherType] where [DeletedBy] is null and [AutoID] = 1') 

我得到一個錯誤說

的數據類型爲nvarchar和位是不相容的添加 操作。

@var2這是我的數據庫[IsBirthdayVoucher]是一個bit類型,但是我已經在上面應用convert(varchar, @var2)。請善意建議我做錯了什麼。謝謝。

存儲過程:

declare @Str as varchar(max) 
declare @var1 as varchar(30)=null 
declare @var2 as varchar(30)=null 
declare @var3 as varchar(30)=null 
declare @var4 as varchar(30)=null 
declare @var5 as varchar(30)=null 

declare @sql as varchar(355) 

set @Str = '[Code][IsBirthdayVoucher][IsReusable]VouT' 

    Set @var1= (select LEFT(@Str, CHARINDEX(']', @Str))) 
     set @Str = SUBSTRING(@Str, CHARINDEX(']', @Str) + 1, LEN(@Str))  
    Set @var2 =(select LEFT(@Str, CHARINDEX(']', @Str))) 
     set @Str = SUBSTRING(@Str, CHARINDEX(']', @Str) + 1, LEN(@Str))   
    Set @var3 =(select LEFT(@Str, CHARINDEX(']', @Str))) 
     set @Str = SUBSTRING(@Str, CHARINDEX(']', @Str) + 1, LEN(@Str))  

    SET @sql = ('select' + @var1 + '+' + convert(varchar,@var2) + 'from [VoucherType] where [DeletedBy] is null and [AutoID] = 1') 

      EXEC(@sql) 
+0

我覺得應該* *是後'空間 'select'',即它應該是'' 選擇「'。 '['會作爲分隔符,但是爲了防禦性編程...... –

+1

我對upvote投了贊成票。我不明白爲什麼有一個downvote,這似乎是一個合理的問題。 –

回答

4

你不轉換[IsBirthdayVoucher]VARCHAR,你將@var2VARCHAR

嘗試:

SET @sql = ('select ' + @var1 + ' + convert(varchar, ' + @var2 + ') from [VoucherType] where [DeletedBy] is null and [AutoID] = 1') 
+0

感謝推! – k80sg

0

試試這個:

SET @sql = ('select CONCAT(' + @var1 + ',' + @var2 + ') from [VoucherType] where [DeletedBy] is null and [AutoID] = 1') 
相關問題