加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读