这样的存储过程有什么错误???(急!!!)(100分)

  • 主题发起人 主题发起人 snaker2001
  • 开始时间 开始时间
S

snaker2001

Unregistered / Unconfirmed
GUEST, unregistred user!
CREATE PROCEDURE dbo.statistic_grsta
@user_id char(2) ='',
@r varchar(30) ='',
@grtj_start varchar(10) ='',
@grtj_end varchar(10) =''
AS
--用游标查出用户权限为“业务用户”的用户
declare @user_name varchar(30)
declare user_cursor CURSOR for select name from users_tab where user_qx='业务用户'
open user_cursor
FETCH NEXT FROM user_cursor INTO @user_name
WHILE(@@fetch_status=0)
begin
--用游标得到统计值
declare @sum1 nvarchar(100),@sx_sum1 int
declare @sum2 nvarchar(100),@qx_sum2 int
declare @mainten_sum int
declare @eq_name varchar(100)
declare @insertsql varchar(1024)
set @insertsql='insert into statistic_gr'+@user_id+@r+' values('''+@user_name+''''
declare equip_cursor CURSOR for select equip_name from equipments_tab
open equip_cursor
FETCH NEXT FROM equip_cursor INTO @eq_name
WHILE(@@fetch_status=0)
begin
set @sum1='select @sx_sum = count(*) from givemainten_tab where equip_name='''+@eq_name+''' and mainten_name='''+@user_name+''' and sx_date>='''+@grtj_start+''' and sx_date<='''+@grtj_end+''''
exec sp_executesql @sum1,N'@grtj_start varchar(10),@grtj_end varchar(10),@sx_sum int output',@grtj_start,@grtj_end,@sx_sum1 output
set @sum2='select @qx_sum = count(*) from gomainten_tab where equip_name='''+@eq_name+''' and qx_name='''+@user_name+''' and qx_date>='''+@grtj_start+''' and qx_date<='''+@grtj_end+''''
exec sp_executesql @sum2,N'@grtj_start varchar(10),@grtj_end varchar(10),@qx_sum int output',@grtj_start,@grtj_end,@qx_sum2 output
set @mainten_sum=@sx_sum1+@qx_sum2
set @insertsql=@insertsql+','+convert(varchar(15),@mainten_sum)+')'
FETCH NEXT FROM equip_cursor INTO @eq_name
end
execute(@insertsql)
close equip_cursor
deallocate equip_cursor
end
close user_cursor
deallocate user_cursor

declare @selsql varchar(1024)
set @selsql='select * from statistic_gr'+@user_id+@r
execute(@selsql)
上面的存储过程,我在DELPHI5中调用它,它出现错误提示,说“and附近有语法错误”。那我的and附近就是
set @sum1='select @sx_sum = count(*) from givemainten_tab where equip_name='''+@eq_name+''' and mainten_name='''+@user_name+''' and sx_date>='''+@grtj_start+''' and sx_date<='''+@grtj_end+''''
exec sp_executesql @sum1,N'@grtj_start varchar(10),@grtj_end varchar(10),@sx_sum int output',@grtj_start,@grtj_end,@sx_sum1 output
set @sum2='select @qx_sum = count(*) from gomainten_tab where equip_name='''+@eq_name+''' and qx_name='''+@user_name+''' and qx_date>='''+@grtj_start+''' and qx_date<='''+@grtj_end+''''
exec sp_executesql @sum2,N'@grtj_start varchar(10),@grtj_end varchar(10),@qx_sum int output',@grtj_start,@grtj_end,@qx_sum2 output
set @mainten_sum=@sx_sum1+@qx_sum2
请问上面的语句有错误吗?请指点,不胜感激!!!
 
各个条件之间最好加括号,在isql 下先调试成功后再在DELPHI下调用
 
exec sp_executesql @sum2,N'@grtj_start varchar(10),@grtj_end varchar(10),@qx_sum int output',@grtj_start,@grtj_end,@qx_sum2 output
这一句好象有错N'@grtj_start varchar(10),@grtj_end varchar(10),@qx_sum int output',
 
我也碰到过这样的提示,我在调试时发现参数赋的值有问题
比如
where equip_name='''+@eq_name+''' and qx_name='''+@user_name+''' 程序运行后
where equip_name=and qx_name='xxxx'
所以会出错的
我的问题就是这样发现的
 
原过程中的:
...where equip_name='''+@eq_name+''' and mainten_name=...

应为:
...where equip_name='+'''+@eq_name+'''+' and mainten_name=...
 
各位,小弟的问题已经解决了,原来问题就出在下面这两句上:
declare @sum1 nvarchar(100),@sx_sum1 int
declare @sum2 nvarchar(100),@qx_sum2 int
我所定义的nvarchar(100)太小了,我改成nvarchar(1024),那这个存储过程就可以用了,
谢谢各位的关心。谢谢!!
 
后退
顶部