2011-12-10 17 views
5

Ben veritabanı değerlerinin bir dize katılmaya çalışıyorum ama bu açıklamada:SQL sunucusu + dinamik sorgu + 'Nvarchar ve bit veri türleri, eklenti operatöründe uyumsuz.'

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

Ben operatörü eklemek veri türleri nvarchar ve bit uyumsuz

söyleyerek bir hata alıyorum. Benim veritabanında [IsBirthdayVoucher] olduğunu

@var2 bir bit türüdür ama zaten üzerinde convert(varchar, @var2) uyguladık. Lütfen yanlış yaptığım şeyi önerin. Teşekkürler.

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

Orada düşünüyorum * * '' select '' olması gerektiği select'', yani' 'sonra bir boşluk olmalıdır. '[' Bir sınırlayıcı olarak hareket edecek, ancak savunma programlarının çıkarları doğrultusunda ... –

+1

İndirgemeye karşı bıktım. Neden bir downvote olduğunu anlamıyorum, bu makul bir soru gibi görünüyor. –

cevap

4

Sen VARCHAR için @var2 dönüştürme ediyoruz, VARCHAR için [IsBirthdayVoucher] dönüştürme değiliz.

Dene:

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

İtme için teşekkürler! – k80sg

0

bu deneyin:

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