SQL server + dynamic query +'数据类型nvarchar和bit在add运算符中不兼容.

k80*_*0sg 5 sql-server

我试图加入一串数据库值,但在此声明中:

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

我收到一个错误说

数据类型nvarchar和bit在add运算符中不兼容.

@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)
Run Code Online (Sandbox Code Playgroud)

ta.*_*.is 5

您没有转换[IsBirthdayVoucher]VARCHAR,而是转换@var2VARCHAR

尝试:

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