sql中存储过程和游标简单示例

 代码如下 复制代码

--创建存储过程 sp_tittles
 IF EXISTS(SELECT * FROM sys.objects WHERE type='p' AND name='sp_titles')
    DROP PROC sp_titles
 GO
 CREATE PROC sp_titles
 AS
     DECLARE @ProblemID int,@TitleID int,@item int
     --声明一个游标
     DECLARE cursor_title CURSOR FOR
         SELECT [pid],[id]
         FROM [tb_titles]
     --打开游标
     OPEN cursor_title
     --提取游标第一行
     FETCH NEXT FROM cursor_title INTO @ProblemID,@TitleID
     --循环提取游标内容
     WHILE @@FETCH_STATUS=0
     BEGIN
         IF EXISTS(
             SELECT *
             FROM [tb_ProblemIndex]
             WHERE [ProblemID]=@ProblemID)
             BEGIN
                 SELECT TOP 1 @item=[id] FROM [tb_titles] WHERE [pid]=@ProblemID ORDER BY createtime DESC
                 UPDATE [tb_ProblemIndex] SET [TitleID] = @item WHERE [ProblemID]=@ProblemID
             END
         ELSE
             INSERT INTO [tb_ProblemIndex]([ProblemID],[TitleID])
             VALUES(@ProblemID,@TitleID)
         FETCH NEXT FROM cursor_title INTO @ProblemID,@TitleID
     END
     --关闭游标
     CLOSE cursor_title
     --释放游标资源
     DEALLOCATE cursor_title
 GO
 --存储过程 sp_titles 结束
 
 --执行存储过程 sp_titles
 EXEC sp_titles
 
 --创建存储过程 sp_answers
 IF EXISTS(SELECT * FROM sys.objects WHERE type='p' AND name='sp_answers')
     DROP PROC sp_answers
 GO
 CREATE PROC sp_answers
 AS
     DECLARE @ProblemID int,@AnswerID int
     --声明一个游标
     DECLARE cursor_answer CURSOR FOR
         SELECT [pid],[id]
         FROM [tb_answers]
     --打开游标
     OPEN cursor_answer
     --提取游标第一行内容
     FETCH NEXT FROM cursor_answer INTO @ProblemID,@AnswerID
     --循环提取游标内容
     WHILE @@FETCH_STATUS=0
     BEGIN
         UPDATE [tb_ProblemIndex] SET [AnswerID]=@AnswerID WHERE [ProblemID]=@ProblemID
         FETCH NEXT FROM cursor_answer INTO @ProblemID,@AnswerID
     END
     --关闭游标
     CLOSE cursor_answer
     --释放游标资源
     DEALLOCATE cursor_answer
 GO
 --存储过程 sp_answers 结束
 
 --执行存储过程 sp_answers
 EXEC sp_answers

时间: 2024-08-04 01:43:38

sql中存储过程和游标简单示例的相关文章

Sql中存储过程的定义、修改和删除操作

1.存储过程的分类 系统存储过程 本地存储过程(用户自定义) 临时存储过程(局部[#].全局[##]临时存储过程) 2.创建存储过程 --选出价格区间的商品信息 create procedure sp_goods_price @minprice float ,@maxprice float as select * from goods where price>=@minprice and price <=@maxprice go 执行存储过程: execute sp_goods_price 2

.NET中Socket编程的简单示例

编程|示例 以下示例程序实现简单的Socket通信,可以开多个客户端.本机测试通过,未做联机测试. Server: using System.Net; using System.Net.Sockets; using System.Threading; using System.Collections; namespace MySocketServer1 {     public partial class Form1 : Form     {         private IPAddress

JavaScript中数组继承的简单示例_基础知识

在写一些库时经常会用到树结构的数据,而且一些树形结构的数据对从根到叶的路径获取需求非常高.比如一个站点的整个路由表就是一棵这样的树,它的「路径」实际上就是 URL 中的 path 部分.所以我好几次都用了丧心病狂的数组继承去实现,下面给大家分享下. 在 JavaScript 中,数组也属于 Object 的一种,它也可以继承.任何两个对象本身就可以有继承关系,数组也不例外.于是我们让一个树的任何一个节点都是数组,它只维护自己下标最大的那个元素的值.其它元素的值通过原型继承从祖先节点继承而来.这样

SQL中存储过程中使用事务,并且加入异常处理机制.

--存储过程中使用事务,并且加入异常处理机制. -- ============================================= CREATE PROCEDURE [dbo].[UP_Orders_Import] AS BEGIN BEGIN TRAN --开启事务 BEGIN TRY SELECT 1/0 COMMIT TRAN --提交事务 END TRY BEGIN CATCH DECLARE @ErrorMessage NVARCHAR(4000) , @ErrorNum

SQL中键集游标选择执行计划的方式和影响因素

上次我们在<游标脚本性能问题解决与分析>讨论过动态游标的执行计划如何选择并且介绍了几种游标的基本知识.本文我们接着研究键集游标选择执行计划的方式和影响因素. 这这里我们通过一个简单的实验来对比测试并且说明结果. 准备如下测试环境: CREATE TABLE [dbo].[test_cursor]( [number] [int] IDENTITY(1,1) NOT NULL, [http://www.aliyun.com/zixun/aggregation/11696.html">

sqlserver中存储过程的递归调用示例

递归式指代码片段调用自身的情况:危险之处在于:如果调用了自身一次,那么如何防止他反复地调用自身.也就是说提供递归检验来保证适当的时候可以跳出. 以阶层为例子说存储过程中递归的调用. 递归 CREATE PROC [dbo].[usp_spFactorial] @InputValue INT, @OuputValue INT OUTPUT AS BEGIN DECLARE @InValue INT; DECLARE @OutValue INT; IF(@InputValue!=1) BEGIN S

SQL中存储过程的创建和使用

如何创建存储过程 user testdatabase(数据库名称) go create procedure testname(存储过程名称) @test1 int, @test2 nvarchar(50) as insert into testtable values(@test1,@test2) return //select * from users where truename like '%[王刘]%' //只能分词查询,查询姓刘和姓王的信息 2 如何使用 public string[]

Sql server存储过程中常见游标循环用法

原文:Sql server存储过程中常见游标循环用法 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELECT A1,A2,A3 FROM YOUTABLENAME OPEN YOUCURNAME fetch next from youcurname into @a1,@a2,@a3 while

SQL Server存储过程中使用表值作为输入参数示例_MsSql

在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入. 在2008中提供了表值参数.使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样可以省去很多自定义的代码.这样的操作对于存储过程内基于表函数的操作变得非常容易操作. 表值参数是使用用户定义的表类型来声明的.所以使用之前要先定义表类型. /* 创建表类型.*/ CREATE