请教 运行下面的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