| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 189 人关注过本帖
标题:菜鸟求教存储过程写法?
只看楼主 收藏
lgp740401
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2008-5-18
结帖率:100%
  已结贴   问题点数:20  回复次数:5   
菜鸟求教存储过程写法?
以下语句中在VFP中这么写,菜鸟想写个存储过程,请教大侠们:
Select xm,zbjt,gzje From &lc子表名称 Where 0=1 Into Cursor v_xm  &&&&字段(姓名,职补津贴,实发金额)            
xm_记录=0
For i=1 To Getwordcount(lcxm,",")  &&&lcxm,lczbjt,lcgzje各存在多个以','隔开的相对值;  
     lc_xm=Getwordnum(lcxm,i,",")
     lc_zbjt=Getwordnum(lczbjt,i,",")
     lc_gzje=Getwordnum(lcgzje,i,",")
    Select v_xm
    Locate For Alltrim(xm)==lc_xm &&&查找姓名字段中是否存在相同姓名的值,若有,就直接加实发金额,没有,就得插入行并为三个字段赋值
   If !Found()
      Append Blank
     Replace xm With lc_xm,zbjt With lczbjt,gzje With lc_gzje
     xm_记录=xm_记录+1
    Else
    Replace gzje With Alltrim(Str(Val(gzje)+Val(lc_gzje),10,1))
   Endif
Endfor
在sql(2005)存储过程中怎么写?

[此贴子已经被作者于2017-11-5 10:24编辑过]

2017-11-05 10:06
lgp740401
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2008-5-18
  得分:0 
也没有会?不可能呀
2017-11-06 07:37
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:62
帖 子:2100
专家分:5127
注 册:2015-3-25
  得分:20 
你这段用来做什么功能的?
给出你表结构和数据,还有是你要的功能
2017-11-06 08:52
lgp740401
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2008-5-18
  得分:0 
回复 3楼 mywisdom88
是想根据一个原始记录表,自动产生一个工资表,这是存储循环的一小部分,这段中只要是想问个,在sql中有什么简明语句像vfp中的getwordnum这样的取值(含有多个带有","的),我查了下用charindex写,感觉好繁琐,语句实在长!
2017-11-06 16:01
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:62
帖 子:2100
专家分:5127
注 册:2015-3-25
  得分:0 
GetWordCount(cString[, cDelimiters])
GETWORDNUM(cString, nIndex[, cDelimiters])
你是用上面2个函数循环替换内容吧.
2017-11-07 13:42
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:62
帖 子:2100
专家分:5127
注 册:2015-3-25
  得分:0 
-- 测试数据
if object_id('tempdb..#子表名称') is not null drop table #子表名称

create table #子表名称(姓名 varchar(10),津贴 numeric(10,2),金额 numeric(10,2))
insert into #子表名称(姓名,津贴,金额)
select '张三',53,5003 union all
select '李四',54,5004 union all
select '王五',55,5005 union all
select '陈七',57,5007

-- select * from #子表名称

-- 开始
declare @lcxm varchar(1000),@lcjt varchar(1000),@lcje varchar(1000)
declare @xm varchar(200),@jt varchar(200),@je varchar(200),@num_xm int,@i1 int,@i2 int,@i3 int
-- @lcxm 要用","结尾
select @lcxm='张三,李四,王五,赵六,陈七,',@lcjt='53,54,55,56,57,',@lcje='5003,5004,5005,5006,5007,',@num_xm=0,@i1=0,@i2=0,@i3=0


if object_id('tempdb..#v_xm') is not null drop table #v_xm
select * into #v_xm from #子表名称

set @i1=charindex(',',@lcxm)
set @i2=charindex(',',@lcjt)
set @i3=charindex(',',@lcje)
while @i1>1
begin
  select @xm=substring(@lcxm,1,@i1-1),@jt=substring(@lcjt,1,@i2-1),@je=substring(@lcje,1,@i3-1)
  select @lcxm=substring(@lcxm,@i1+1,len(@lcxm)-@i1),@lcjt=substring(@lcjt,@i2+1,len(@lcjt)-@i2),@lcje=substring(@lcje,@i3+1,len(@lcje)-@i3)
 
  set @i1=charindex(',',@lcxm)
  set @i2=charindex(',',@lcjt)
  set @i3=charindex(',',@lcje)
  if exists(select 姓名 from #v_xm where 姓名=@xm)
     begin
       update #v_xm set 金额=金额+@je where 姓名=@xm
       set @num_xm=@num_xm+1
     end
  else
     begin
       insert into #v_xm(姓名,津贴,金额) values(@xm,@jt,@je)
     end
end

-- 结束

-- 查看结果

select * from #子表名称
select * from #v_xm
2017-11-07 16:26







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.064069 second(s), 8 queries.
Copyright©2004-2017, BCCN.NET, All Rights Reserved