`
java_cd
  • 浏览: 59458 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

sqlserver 游标示例

阅读更多
create proc updatetestuser2
as
declare testcursor cursor for  
select login_id,login_name from testuser1
open testcursor     
declare @loginid int,@loginname varchar(30)
fetch next from testcursor into @loginid,@loginname 
while(@@fetch_status = 0) 
begin
   update testuser2 set oalogin_id = @loginid where login_name = @loginname 
fetch next from testcursor into @loginid,@loginname 

end
close testcursor 
deallocate testcursor
go

呵呵,因实施现场需要我们研发人员给他们一个批量删除业务数据的SQL,我把他写成存储过程来用,存储过程如下:

--创建存储过程删除入围管理和合作协议相关业务数据
--作者:zengqiang
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = 'au_info_all' AND type = 'P')
   DROP PROCEDURE SP_DELETEDATA
GO

CREATE PROCEDURE SP_DELETEDATA AS

DECLARE @changeID int

DECLARE TableID cursor for
select ItemAcceptId from T_ItemAccept
OPEN  TableID
fetch next from TableID into @changeID

    -- 循环开始
    while @@fetch_status = 0
    begin
        -- 逻辑操作
delete from T_StartInfo where FlowTypeId=2468 and RefId=@changeID
        delete from T_ApproveHistory where FlowTypeId=2468 and RefId=@changeID
        delete from T_ItemAccept where ItemAcceptId=@changeID
        -- 取下一条记录
        fetch next from TableID into @changeID
    end
    -- 循环结束
    -- 关闭游标 删除游标引用
    close TableID
    deallocate TableID

DECLARE TableID2 cursor for
select cooperateId from T_Cooperate
OPEN  TableID2
fetch next from TableID2 into @changeID

    -- 循环开始
    while @@fetch_status = 0
    begin
        -- 逻辑操作
delete from T_StartInfo where FlowTypeId=668 and RefId=@changeID
        delete from T_ApproveHistory where FlowTypeId=668 and RefId=@changeID
        delete from T_Cooperate where cooperateId=@changeID
        -- 取下一条记录
        fetch next from TableID2 into @changeID
    end
    -- 循环结束
    -- 关闭游标 删除游标引用
    close TableID2
    deallocate TableID2
go
--执行存储过程
execute SP_DELETEDATA
go
--删除存储过程
DROP PROCEDURE SP_DELETEDATA

----------------------------------------------------------------------------------------------------------------------------------------------------

--另一个存储过程

create procedure CreateReplyCode_A_ProC  --处理常规的没有批复文号的项目
@ConstructUnitId int,  --建设单位ID
@KeyCode varchar(255)  --关键字,对应给的那个Excel表!如ConstructUnitId = 401,KeyCode = '三亚项字'
as
   set nocount on
   declare @Year varchar(255)
   declare @SerialNO int
   set @SerialNO = 0
   declare @SerialNOStr varchar(255)
   declare @Len int
   declare @I int
   set @I = 0
   declare @ItemCreatId int
   declare @KeyCodeTemp varchar(255)
   declare ItemCreatId_Cursor_A cursor for
   select ItemCreatId from T_ItemCreate left outer join t_startinfo on t_itemcreate.itemcreatId = t_startinfo.refid
           and t_startinfo.flowtypeid = 1 and t_startinfo.docstate = 3 where (replycode is null or replycode = '')and ConstructUnitId = @ConstructUnitId
   open ItemCreatId_Cursor_A
   fetch next from ItemCreatId_Cursor_A into @ItemCreatId
     while @@fetch_status = 0
     begin
         select @Year = PlanYear from T_ItemCreate inner join T_yearplan on T_YearPlan.YearPlanid=T_ItemCreate.YearPlanId where T_ItemCreate.ItemCreatId = @ItemCreatId              
         begin
             set @SerialNO = @SerialNo + 1
             set @SerialNoStr = CAST(@SerialNo as varchar(255))
      
             set @Len = LEN(@SerialNoStr)
             while @I < (4 - @Len)
             begin
                 set @SerialNOStr = '0'+@SerialNOStr
                 if LEN(@SerialNOStr) = 4
                    break
                 else
                   continue
             end
             set @KeyCodeTemp = @KeyCode+'['+@Year+']'+@SerialNOStr
             update T_ItemCreate set ReplyCode = @KeyCodeTemp where ItemCreatId = @ItemCreatId
         end
     fetch next from ItemCreatId_Cursor_A into @ItemCreatId
     end
   close ItemCreatId_Cursor_A
deallocate ItemCreatId_Cursor_A

/*****************************************************************************************/

create procedure CreateReplyCode_B_ProC  --处理建设单位为17的没有批复文号的项目
@ConstructUnitId int,  --建设单位ID为17(只能输入17)
@ConstructDeptId int,  --建设单位为17的取取省公司部门ID
@KeyCode varchar(255)  --关键字,对应给的那个Excel表!如ConstructDeptId = 14,KeyCode = '计建项字'
as
   set nocount on
   declare @Year varchar(255)
   declare @SerialNO int
   set @SerialNO = 0
   declare @SerialNOStr varchar(255)
   declare @Len int
   declare @I int
   set @I = 0
   declare @ItemCreatId int
   declare @KeyCodeTemp varchar(255)
   declare ItemCreatId_Cursor_B cursor for
   select ItemCreatId from T_ItemCreate left outer join t_startinfo on t_itemcreate.itemcreatId = t_startinfo.refid
           and t_startinfo.flowtypeid = 1 and t_startinfo.docstate = 3 where (replycode is null or replycode = '')and ConstructUnitId = @ConstructUnitId and ConstructDeptId = @ConstructDeptId
   open ItemCreatId_Cursor_B
   fetch next from ItemCreatId_Cursor_B into @ItemCreatId
     while @@fetch_status = 0
     begin
         select @Year = PlanYear from T_ItemCreate inner join T_yearplan on T_YearPlan.YearPlanid=T_ItemCreate.YearPlanId where T_ItemCreate.ItemCreatId = @ItemCreatId              
         begin
             set @SerialNO = @SerialNo + 1
             set @SerialNoStr = CAST(@SerialNo as varchar(255))
      
             set @Len = LEN(@SerialNoStr)
             while @I < (4 - @Len)
             begin
                 set @SerialNOStr = '0'+@SerialNOStr
                 if LEN(@SerialNOStr) = 4
                    break
                 else
                   continue
             end
             set @KeyCodeTemp = @KeyCode+'['+@Year+']'+@SerialNOStr
             update T_ItemCreate set ReplyCode = @KeyCodeTemp where ItemCreatId = @ItemCreatId
         end
     fetch next from ItemCreatId_Cursor_B into @ItemCreatId
     end
   close ItemCreatId_Cursor_B
deallocate ItemCreatId_Cursor_B

分享到:
评论

相关推荐

    SQL SERVER游标示例

    完整的SQL SERVER双层游标嵌套示例

    sqlserver 游标的简单示例

    Declare @Id varchar(20) Declare @Name varchar(20) Declare Cur Cursor For select substring(id,0,7) as id,name from temp1 Open Cur Fetch next From Cur Into @Id,@Name While @@fetch_status=0 Begin Update ...

    sqlserver游标使用步骤示例(创建游标 关闭游标)

    主要介绍了sqlserver游标使用步骤,包括创建游标、关闭游标,大家参考使用吧

    sql server 2008 存储过程示例带游标

    sql server 2008 存储过程示例带游标

    sql server和oracle的存储过程、游标示例

    一些sql server和oracle存储过程示例

    SQL Server存储过程示例

    SQL Server存储过程示例,在存储工程中Transaction使用示例,游标的使用示例,自定义异常的使用示例,以及Java调用SQL Server存储过程的示例代码。包括JDBC和Spring两种调用方式。

    游标嵌套 STATUS 异常 存储过程

    一个存储过程的示例,简单展示了如下方面: 1,异常处理,事务回滚。 2,错误消息返回。 3,游标嵌套。 4,对于嵌套游标STATUS的互相影响问题的解决办法《注意001和002的注释位置,fetch的位置》。 对于初学者,...

    MS SQL Server游标(CURSOR)的学习使用

    使用MS SQL Server这样久,游标一直没有使用过。以前都是使用WHILE循环加临时表来实现。刚刚联系个示例了解到游标概念与语法

    sqlserver基础(示例、注释)

    本文件 适用于sqlserver初学者。 文档中对存储过程。游标。左右连接查询 等 有详细的示例 和注释。 简单易懂。

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

    该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-SQL编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...

    SQLServer常见问题解决方法

    包含一些常见的SqlServer问题解决方法,包括:sa忘记密码怎么办?SQL server2008过期激活方法?SqlSever千万条以上记录分页数据库优化经验总结,删除所有存储过程的方法及一个简单的游标示例.

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    《SQL Server 2008管理员必备指南》适合所有SQL Server用户参考,更是数据库管理员的必备指南。 编辑推荐 《SQL Server 2008管理员必备指南》教你全面掌握SQL Server 2008的必备指南!这本实用指南讲述了SQL Server ...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    《SQL Server 2008管理员必备指南》适合所有SQL Server用户参考,更是数据库管理员的必备指南。 编辑推荐 《SQL Server 2008管理员必备指南》教你全面掌握SQL Server 2008的必备指南!这本实用指南讲述了SQL Server ...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    《SQL Server 2008管理员必备指南》适合所有SQL Server用户参考,更是数据库管理员的必备指南。 编辑推荐 《SQL Server 2008管理员必备指南》教你全面掌握SQL Server 2008的必备指南!这本实用指南讲述了SQL Server ...

    SQL Server 2008高级程序设计 4/6

     本书首先介绍SQL Server 2008的新功能,然后在更详实的示例代码的引导下全面深入地展开论述,讨论了如何编写复杂查询、构建各种数据结构以及提高应用程序性能,还讲述了如何管理高级脚本和数据库以及如何确定和...

    SQL Server 2008高级程序设计 2/6

     本书首先介绍SQL Server 2008的新功能,然后在更详实的示例代码的引导下全面深入地展开论述,讨论了如何编写复杂查询、构建各种数据结构以及提高应用程序性能,还讲述了如何管理高级脚本和数据库以及如何确定和...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    本书适合专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握这门复杂的编程语言,以切合实际的方案来解决复杂的实际问题。...

Global site tag (gtag.js) - Google Analytics