2011-12-10 13 views
5

Sto cercando di partecipare a una serie di valori di database, ma in questa dichiarazione:SQL server + query dinamica + 'I tipi di dati nvarchar e bit non sono compatibili con l'operatore di aggiunta.'

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

ottengo un errore che dice

I tipi di dati nvarchar e bit sono incompatibili nella aggiungere dell'operatore.

@var2 che è [IsBirthdayVoucher] nel mio database è un tipo bit ma ho già applicato convert(varchar, @var2) su di esso. Per favore, consiglio gentilmente quello che sto facendo male. Grazie.

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

ci credo * * dovrebbe essere uno spazio dopo ' 'select'', vale a dire che dovrebbe essere'' selezionare ''. Il '[' fungerà da delimitatore, ma nell'interesse della programmazione difensiva ... –

+1

Ho svitato contro il downvote. Non capisco perché ci sia stato un downvote, questa sembra una domanda ragionevole. –

risposta

4

Lei non è la conversione [IsBirthdayVoucher]-VARCHAR, si sta convertendo @var2-VARCHAR.

Prova:

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

Grazie per la spinta! – k80sg

0

provare questo:

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