存储过程的问题帮忙解决一下 这是一个动态提交的语句

usernamezero 2010-06-11 01:22:32
Alter procedure pr_KeFuFaHuo_FaHuoDan
@CustomerNo varchar(50),
@KeFuFaHuoID varchar(6000),
@CaoZuoRen varchar(50),
@Factory varchar(50)
as
begin
set xact_abort on
begin transaction t
declare @kh_Lxr varchar(50),@kh_Tel varchar(50),@kh_Fx varchar(100),@kh_Dz varchar(100);
declare keCursor cursor for
select top 1 isnull(Dt.DeptName,'客户资料不完整'),isnull(Dt.Tel1,'客户资料不完整'),
isnull(Z.ZoneName,'客户资料不完整'),isnull(C.Address,'客户资料不完整')
from CustomerDept Dt
left join Customer C on Dt.CustomerNo=C.CustomerNo
left join Zone Z on C.City=Z.id
where Dt.DeptFlag='1' and Dt.CustomerNo=@CustomerNo
open keCursor
fetch next from KeCursor into @kh_Lxr,@kh_Tel,@kh_Fx,@kh_Dz
while @@fetch_status=0
begin
break;
end
close keCursor;
deallocate keCursor

declare @vsql varchar(8000);
set @vsql=(' declare @ddlx varchar(50);declare @ddbh varchar(50);declare @fhsl int;'
+' declare @mxddlx varchar(50);declare @mxddbh varchar(50);declare @mxcpbh varchar(50);declare @mxfhsl int;'

+' declare @t table( DingDanLeiXing varchar(50),DingDanBianhao varchar(50),FaHuoShuLiang int);'
+' insert into @t(DingDanLeiXing,DingDanBianhao,FaHuoShuLiang) '
+' select DingDanLeiXing,DingDanBianhao,sum(FaHuoShuLiang) FaHuoShuLiang '
+' from KeFuFaHuo where ID in ('+@KeFuFaHuoID+') group by DingDanLeiXing,DingDanBianhao ; '
+' declare @t_mingxi table(DingDanLeiXing varchar(50),DingDanBianhao varchar(50),ChanPinBianHao varchar(50),FaHuoShuLiang int);'
+' insert into @t_mingxi(DingDanLeiXing,DingDanBianhao,ChanPinBianHao,FaHuoShuLiang) '
+' select DingDanLeiXing,DingDanBianhao,ChanPinBianHao,sum(FaHuoShuLiang) FaHuoShuLiang '
+' from KeFuFaHuo where ID in ('+@KeFuFaHuoID+') group by DingDanLeiXing,DingDanBianhao,ChanPinBianHao ; '

+' declare MyCursor Cursor for select DingDanLeiXing,DingDanBianhao,FaHuoShuLiang from @t '
+' open MyCursor '
+' fetch next from MyCursor into @ddlx,@ddbh,@fhsl '
+' while @@fetch_status=0 '
+' begin '
+' declare @bh_FH varchar(50); '
+' set @bh_FH=( Replace(Replace(Replace(Replace(Convert(varchar(50),GetDate(),21),'':'',''''),''-'',''''),'' '',''''),''.'','''') ) ; '
+' print @bh_FH '
-- +' insert into FaHuoDan(ID,FaHuoDanBianHao,DanJuRiQi,KeHuBianHao,KeHuLianXiRen,KeHuLianXiRenLianXiFangShi, '
-- +' FangXiang,FaHuoDiZhi,FaHuoShuLiang,ZhuangTai,XinJianRen,XinJianRiQi,DeleteTag,ShouHuoQueRen, '
-- +' ChanPinLeiXing,DingDanLeiXing,ShouHuoShuLiang,SuoShuGongChang) '
-- +' values(NewID(),@bh_FH,GetDate(),'''+@CustomerNo +''','''+@kh_Lxr+''','''+@kh_Tel+''','
-- + ' '''+@kh_Fx+''','''+@kh_Dz+''',@fhsl,''0'','''+@CaoZuoRen+''',GetDate(),''0'',''0'', '
-- +' substring(@ddlx,0,1),@ddlx,'''','''+@Factory+''' ) '

-- +' declare MxCursor cursor for select DingDanLeiXing,DingDanBianhao,ChanPinBianHao,FaHuoShuLiang from @t_mingxi '
-- +' open MxCursor '
-- +' fetch next from MxCursor into @mxddlx,@mxddbh,@mxcpbh,@mxfhsl '
-- +' while @@fetch_status=0 '
-- +' begin '
-- +' if @mxddlx=@ddlx and @mxddbh=@ddbh '
-- +' begin '
-- +' insert into FaHuoDanMingXi(id,FaHuoDanBianHao,ChanPinBianHao,ShuLiang)'
-- +' values( NewID(),@bh_FH,@mxcpbh,@mxfhsl ) '
-- +' end '
-- +' fetch next from MxCursor into @mxddlx,@mxddbh,@mxcpbh,@mxfhsl '
-- +' end '
-- +' close MxCursor '
-- +' deallocate MxCursor '

+' fetch next from MyCursor into @ddlx,@ddbh,@fhsl '
+' end '
+' close MyCursor '
+' deallocate MyCursor'
);
print @vsql;
exec (@vsql)
if @@Error<>0
begin
RollBack transaction t;
end
else
begin
Commit transaction t;
end
end


set @bh_FH=( Replace(Replace(Replace(Replace(Convert(varchar(50),GetDate(),21),'':'',''''),''-'',''''),'' '',''''),''.'','''') ) ;

此句为什么获得的时间一样,这是在一个循环里边的应该时间是不一样的啊,各位帮解决下,3ks


---以下是执行语句
begin
declare @CustomerNo varchar(50), @KeFuFaHuoID varchar(500), @CaoZuoRen varchar(50), @Factory varchar(50);
set @KeFuFaHuoID=(' ''3859C7DB-4866-4312-8886-69D42DD69538'',''D0B58016-487E-4E24-81C5-5E4B62383D6B'' ');
exec pr_KeFuFaHuo_FaHuoDan 'J2011006',@KeFuFaHuoID,'777777','001001'
end

...全文
72 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
usernamezero 2010-06-26
  • 打赏
  • 举报
回复
看大家都这么辛苦给分了
dawugui 2010-06-11
  • 打赏
  • 举报
回复
帮顶.
ChinaJiaBing 2010-06-11
  • 打赏
  • 举报
回复


---try

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


宇峰科技 2010-06-11
  • 打赏
  • 举报
回复
exec (@sqlget)
usernamezero 2010-06-11
  • 打赏
  • 举报
回复
哈哈,真是一样,
我做了个记数器,把记数加上后算是可以了吧,哈哈
永生天地 2010-06-11
  • 打赏
  • 举报
回复
不会吧

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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