注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

每日聊的博客

 
 
 

日志

 
 
 
 

定义变量,将字符串分割的方法,以及存储过程  

2014-12-11 15:03:50|  分类: SQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
USE tiy
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = 'SP_MaintenancePlanSave' AND type = 'P')
   DROP PROCEDURE SP_MaintenancePlanSave
GO
USE tiy
GO
CREATE PROCEDURE SP_MaintenancePlanSave
   @IntervalDate varchar(200),
   @IntervalTime varchar(200)
AS

DECLARE @k nvarchar(20)
set @k='张三,李四中,kkekl,kdf,jnl'
DECLARE @SplitOn nvarchar(20)
set @SplitOn=','
DECLARE @i int
set @i=1
DECLARE @tempUpID int
DECLARE @tempID int
set @tempUpID=0
set @tempID=0

WHILE @i <= LEN(@k)
       BEGIN
         INSERT INTO OrgInfo VALUES (
          SUBSTRING(@k, @i, CHARINDEX(',', @k + ',', @i) - @i)
           ,0,@i)
        set  @i=CHARINDEX(',', @k + ',', @i)+1         
        set @tempID=SCOPE_IDENTITY();
          IF @tempUpID > 0
          BEGIN
           update OrgInfo set nextid=@tempID where OrgId=@tempUpID
          END
        set @tempUpID=@tempID
       END    


GO

-----------------------完整的存储过程。

---创建表
if exists (select 1 from sysobjects where name='T_Crm_MaintenancePlan')
    drop table T_Crm_MaintenancePlan
go 
create TABLE T_Crm_MaintenancePlan(

ID  Bigint IDENTITY(1,1) NOT NULL,
MaintenanceID Bigint   NOT NULL,

iIntervalDate   int   NOT null  default(0),
iIntervalTime   int   NOT null  default(0),
NextID   Bigint    null  default(0),
cRepairCode  nvarchar(20) NULL,
dRepairDate  date  null,
dPlanStartDate  date  null,
del   Tinyint    null  default(0),

constraint PK_T_T_Crm_MaintenancePlan primary key(ID)
);




USE [OA_CRM]-----------检查存储过程是否存在,存在删除
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = 'SP_MaintenancePlanSave' AND type = 'P')
   DROP PROCEDURE SP_MaintenancePlanSave
GO
USE [OA_CRM]
GO
---------创建存储过程
CREATE PROCEDURE SP_MaintenancePlanSave
--------定义五个变量
   @IntervalDate varchar(200), ----间隔天数
   @IntervalTime varchar(200), ----间隔小时数
   @LoopID    int,   ----从第几个开始循环
   @PlanStartDate date,----计划开始执行时间
   @MaintenanceID  Bigint ---计划主表MaintenanceID
  
AS

DECLARE @SplitOn nvarchar(20)
set @SplitOn=',' --定义分隔符
DECLARE @i int  ---从自符串的第几个字符开始查找
set @i=1
DECLARE @i1 int
set @i1=1
DECLARE @w int  ----第几记录,从0开始,
set @w=0
DECLARE @tempUpID Bigint  ----上一条插入记录的ID
DECLARE @tempID Bigint    ----当前插入记录的ID
DECLARE @loopTempID Bigint ----开始循环的ID
set @tempUpID=0
set @tempID=0

WHILE @i <= LEN(@IntervalDate)   ----为i<小时等间隔天数字符串的整长时循环
       BEGIN
         INSERT INTO T_Crm_MaintenancePlan  (MaintenanceID,iIntervalDate,iIntervalTime) VALUES (@MaintenanceID,
          SUBSTRING(@IntervalDate, @i, CHARINDEX(',', @IntervalDate + ',', @i) - @i) 
           ,SUBSTRING(@IntervalTime, @i1, CHARINDEX(',', @IntervalTime + ',', @i1) - @i1))
        set  @i=CHARINDEX(',', @IntervalDate + ',', @i)+1     
        set  @i1=CHARINDEX(',', @IntervalTime + ',', @i1)+1      
        set @tempID=SCOPE_IDENTITY();
       
          IF @tempUpID > 0
          BEGIN
           update T_Crm_MaintenancePlan set nextid=@tempID where ID=@tempUpID
          END
          -----第一条记录插入后更新del为2,即当前执行,计划开始时间。
          IF @w = 0 
          BEGIN
           update T_Crm_MaintenancePlan set del=2, dPlanStartDate=@PlanStartDate where ID=@tempID
          END

           ----如果循环记录的数字等于当前记录的数。即将当前ID给@loopTempID
          IF @LoopID = @w
          BEGIN
           set @loopTempID=@tempID
          END
         
          ----如果已经是执行到了最后一条插入记录,则将最后一条的nextid更新为@loopTempID
          IF @i > LEN(@IntervalDate)
          BEGIN
            update T_Crm_MaintenancePlan set nextid=@loopTempID where ID=@tempID
          END
                   
        set @tempUpID=@tempID
        set @w=@w+1
       END


GO

------------调用语句
EXECUTE SP_MaintenancePlanSave '40,67,99', '67,,','1','1','2014-12-11'
  评论这张
 
阅读(5)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017