SQL server + requête dynamique + " Les types de données nvarchar et peu sont incompatibles dans l'ajout de l'opérateur.'

J'essaie de joindre une chaîne de valeurs de base de données, mais dans cette déclaration:

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

Je reçois un message d'erreur indiquant

Les types de données nvarchar et peu sont incompatibles dans l'ajouter
de l'opérateur.

@var2 qui est [IsBirthdayVoucher] dans ma base de données est un bit type, mais j'ai déjà appliqué convert(varchar, @var2) sur elle. Merci des conseils que je fais de mal. Merci.

La procédure stockée:

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)
Je pense qu'il y a doit avoir un espace après 'select', c'est à dire qu'il doit être 'select '. Le [ agira comme séparateur, mais dans l'intérêt de la défense de la programmation...
Je upvoted contre le downvote. Je ne comprends pas pourquoi il y avait un downvote, cela semble être une question tout à fait raisonnable.

OriginalL'auteur k80sg | 2011-12-10