我的存储过程,在SQL查询分析器中执行很好。但我用PB调用时,有问题!

liliah 2003-11-16 10:33:39
在用PB调用时,是只执行了最后一个EXEC(@SQL)的效果。

--CREATE PROCEDURE CL_Batchmodify
declare @c_deptid varchar(40),@c_tablename varchar(20),@c_fieldid varchar(20),@c_op char(1),@n_value numeric(9,2)
--as
select @c_deptid='16000000',@c_tablename='cl_salary_base',@c_fieldid='cqjjs',@c_op = '',@n_value =31
declare @sql varchar(200),@ls_where varchar(200)
declare @year int,@month int

select isnull(@c_op,'')
select isnull(@c_deptid,'')
if @c_deptid = ''
begin
select @ls_where = ''
end
else
begin
select @ls_where = ' where cl_ry_base.jgid='+@c_deptid+''
end
--如是工资表和考勤表 只能批量更新当前工作年月的数据
--年度月份
select @year=syear,@month=smonth from cl_workday where flag_current= 1
if @c_tablename = 'cl_salary' or @c_tablename = 'yjtz'
if @ls_where = ''
select @ls_where =' where '+@c_tablename+'.syear='+convert(char(4),@year)+' and '+@c_tablename +'.smonth='+convert(varchar(2),@month)
else
select @ls_where =@ls_where + 'and '+@c_tablename +'.syear='+convert(char(4),@year)+' and '+@c_tablename +'.smonth='+convert(varchar(2),@month)


--END
declare @c_string_ryid varchar(100)
if @c_tablename='yjtz'
select @c_string_ryid=@c_tablename+'.staff_cid'
else
select @c_string_ryid=@c_tablename+'.ryid'


--如是员工基本数据表和考勤表 要先处理更新标志

if @c_tablename = 'cl_salary_base' or @c_tablename = 'yjtz'

begin
set @sql='update '+@c_tablename +' set flag_update=0 '

exec(@sql)--针对所有数据先清0   ***这句没执行


set @sql='update '+@c_tablename +' set flag_update=1 from '+ @c_tablename
+' inner join cl_ry_base on cl_ry_base.ryid = '+@c_string_ryid
+ @ls_where


exec(@sql)--针对所选部门再置位  ***这句也没执行



end
--再处理计算数据


if @c_op = ''
set @sql='update '+@c_tablename +' set '+@c_fieldid+'='+convert(varchar(15),@n_value)
+ ' from '+ @c_tablename +' inner join cl_ry_base on cl_ry_base.ryid = '+@c_string_ryid
+ @ls_where

else if @c_op = '+'
set @sql='update '+@c_tablename +' set '+@c_fieldid+'='+@c_fieldid +'+'+convert(varchar(15),@n_value)
+ ' from '+ @c_tablename +' inner join cl_ry_base on cl_ry_base.ryid = '+@c_string_ryid
+ @ls_where

else if @c_op = '-'
set @sql='update '+@c_tablename +' set '+@c_fieldid+'='+@c_fieldid +'-'+convert(varchar(15),@n_value)
+ ' from '+ @c_tablename +' inner join cl_ry_base on cl_ry_base.ryid = '+@c_string_ryid
+ @ls_where
exec(@sql***只执行了这个!

)
GO
...全文
69 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-11-17
  • 打赏
  • 举报
回复
分成多个过程,统一在一个过程里调用呢?
zjcxc 2003-11-17
  • 打赏
  • 举报
回复
是这样的.

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧