2011-12-10 22 views
5

は、私はデータベースの値の文字列に参加しようとしていますが、この声明の中で:SQLサーバー+動的クエリ+ 'データ型nvarcharとbitがadd演算子で互換性がありません。'

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

私は 演算子を追加してデータ型はnvarcharとビットは互換性がありません

というエラーを取得します。私のデータベースで[IsBirthdayVoucher]ある

@var2bitタイプですが、私はすでにそれにconvert(varchar, @var2)を適用しています。私が間違っていることを親切にアドバイスしてください。ありがとう。

SPROC:

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

私はdownvoteに対してupvoted。私はなぜdownvoteがあったのかわかりませんが、これは合理的な質問のようです。 –

答えて

4

あなたがVARCHAR@var2を変換している、VARCHAR[IsBirthdayVoucher]を変換していません。

試してみてください。

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') 
関連する問題