Sqlserver中存储过程和游标的一些使用例子
发布时间:2020-12-12 13:22:10 所属栏目:MsSql教程 来源:网络整理
导读:/*带输入输出参数存储过程*/ALTER PROCEDURE pro_test2@userID INT,@maxUserID INT OUTPUT,@countUser INT OUTPUTAS BEGIN SELECT * FROM dbo.SY_ADMIN WHERE UserID=@userID --10075SELECT @maxUserID=10089SET @countUser=20000 END; GO /*测试*/DECLARE @
/*带输入输出参数存储过程*/ ALTER PROCEDURE pro_test2 @userID INT,@maxUserID INT OUTPUT,@countUser INT OUTPUT AS BEGIN SELECT * FROM dbo.SY_ADMIN WHERE UserID=@userID --10075 SELECT @maxUserID=10089 SET @countUser=20000 END; GO /*测试*/ DECLARE @maxUserID INT,@countUser INT EXECUTE pro_test2 10075,@maxUserID OUTPUT,@countUser OUTPUT SELECT a=@countUser,b=@maxUserID /*带输入输出参数 0登录成功 1密码错误 2用户名错误*/ ALTER PROC proc_test3 @UserName VARCHAR(50),@UserPwd VARCHAR(50),@Result INT OUT AS BEGIN IF @UserName = 'admin' BEGIN IF @UserPwd = '111' SET @Result = 0 ELSE SET @Result = 1 END; ELSE SET @Result = 2 END /*测试*/ DECLARE @Result INT EXECUTE proc_test3 'hystu1','111',@Result OUT SELECT a= @Result /*游标使用例子*/ --声明2个变量 DECLARE @D_Id NVARCHAR(MAX); DECLARE @D_Name NVARCHAR(MAX); DECLARE @D_Password NVARCHAR(MAX); --声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同 DECLARE mycursor CURSOR FOR SELECT D_Id,D_Name,D_Password FROM dbo.TestTable; --打开游标 OPEN mycursor; --从游标里取出数据赋值到我们刚才声明的2个变量中 FETCH NEXT FROM mycursor INTO @D_Id,@D_Name,@D_Password; --判断游标的状态 -- 0 fetch语句成功 ---1 fetch语句失败或此行不在结果集中 ---2 被提取的行不存在 WHILE ( @@fetch_status = 0 ) BEGIN --显示出我们每次用游标取出的值 print (@D_Id+'--------'+@D_Name+'--------'+@D_Password) --用游标去取下一条记录 FETCH NEXT FROM mycursor INTO @D_Id,@D_Password; END; --关闭游标 CLOSE mycursor; --撤销游标 DEALLOCATE mycursor; /* SQL游标的优点是可以方便从一个结果集中进行循环遍历数据在进行操作。 1、游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作, 而不是一次对整个结果集进行同一种操作; 2、它还提供对基于游标位置而对表中数据进行删除或更新的能力; 3、游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来, 使两个数据处理方式能够进行沟通。 然而游标也有缺点——复杂和低效,是游标的最大缺点,也是致使很多时候在使用存储过程中没有使用游标的主要原因。 */ --将book表中的LookCount(int型)字段加上800-1000的随机整数 DECLARE @bid INT; DECLARE cur CURSOR READ_ONLY FOR SELECT bid FROM Book; OPEN cur; FETCH NEXT FROM cur INTO @bid; WHILE ( @@fetch_status = 0 ) BEGIN UPDATE dbo.Book SET LookCount = LookCount + CAST(( RAND() * ( 1000 - 800 ) + 800 ) AS INT) WHERE bid = @bid; FETCH NEXT FROM cur INTO @bid; END; CLOSE cur; DEALLOCATE cur; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |