请教 运行下面的sql语句提示'00' 附近有语法错误。
declare @StartDate       smalldatetime
declare @EndDate       smalldatetime
declare @computName  nvarchar(50)
declare @Vouchtype      nvarchar(12)
set @StartDate='2010-05-01'
set @EndDate='2010-05-31'
set @computName='fht'
set @Vouchtype='01'
declare @Str_Query  nvarchar(2000)
declare @Str_Query2     nvarchar(1000)
declare @Str_Query3     nvarchar(1000)
declare @JHdate smalldatetime
set @Str_Query='select a.Vouchtype, a.CCode, a.CustomerCode, c.customername,a.DDate,a.Productcode,b.productname,b.model,b.unit'
--计算case left(cRdCode,3)  N'18' then (case when iAInQuantity is null then 0 else iAInQuantity end) else 0 end AS N'18数量',
declare CTJHjs cursor local forward_only for
select DISTINCT jhdate from ctsubsidiary
open CTJHjs
fetch next from CTJHjs into @JHdate
while @@fetch_status=0
     begin
		set @Str_Query2=@Str_Query2 + ',case a.jhdate when '+convert(varchar(30),@JHdate,120) + ' then (case when bhnumber is null then 0 else bhnumber end) else 0 end as ' + convert(varchar(30),@JHdate,120)
		fetch next from CTJHjs into @JHdate
     End
Close CTJHjs
DEALLOCATE CTJHjs
set @Str_Query3='   into tmpctjs'+@computName +'   from ctsubsidiary a left join haierproductarchives b on a.productCode=b.productCode left join customerarchives c ON a.customercode = c.customercode  Where a.cVouType= N' + @Vouchtype +
'  and a.ddate>=' + convert(varchar(30),@StartDate,120) +' and a.ddate<='+ convert(varchar(30),@endDate,120)
  exec (@Str_Query+@Str_Query2+@Str_Query3)
------解决方案--------------------
动态SQL,估计是组合不当,参考
--动态sql语句基本语法
SQL code
 
1 :普通SQL语句可以用Exec执行 
eg: Select * from tableName 
Exec('select * from tableName') 
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL 
eg: 
declare @fname varchar(20) 
set @fname = 'FiledName' 
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 
当然将字符串改成变量的形式也可 
declare @fname varchar(20) 
set @fname = 'FiledName' --设置字段名 
declare @s varchar(1000) 
set @s = 'select ' + @fname + ' from tableName' 
Exec(@s) -- 成功 
exec sp_executesql @s -- 此句会报错 
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) 
set @s = 'select ' + @fname + ' from tableName' 
Exec(@s) -- 成功 
exec sp_executesql @s -- 此句正确 
3. 输出参数 
declare @num int, 
@sqls nvarchar(4000) 
set @sqls='select count(*) from tableName' 
exec(@sqls) 
--如何将exec执行结果放入变量中? 
declare @num int, 
@sqls nvarchar(4000) 
set @sqls='select @a=count(*) from tableName ' 
exec sp_executesql @sqls,N'@a int output',@num output 
select @num