sql游标的使用与exec的两种用法

1.exec的用法

(1).执行存储过程:exec 存储过程名 参数

1 exec myprocdure @code="Z0001" 
3 exec myprocdure '2019/01/01''2019/10/01','Z0001'

(2).动态执行sql语句:用圆括号(),不能带输入,输出参数

1 exec ( 'Insert #exl( code ) Select code From excode '

2.sql中游标的使用

游标是一种处理数据的方法,主要用于存储过程,触发器和T-SQL语句中,他们的结果集可用于其他的T-SQL语句。可以查看或处理结果集中向前或向后浏览数据的功能。

1.游标可以从多条数据的结果集中每次提取一条数据

2.可以对select返回的结果集中每次执行相同或不同的操作

3.保存查询结果。方便以后使用 ,游标的结果由select语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。

游标主要包括结果集和游标位置两部分,游标结果集是定义游标的select语句返回的行集合,游标位置是指向这个结果集中的某一行的指针,因此,若要对结果集进行逐条单独处理时,需声明一个指向该结果集中的游标变量

1.游标变量的声明:declare @cursor cursor

2.声明游标:declare 游标名 cursor

3.创建游标:declare 游标名 cursor for select 语句

4.fetch next from 游标名 into 游标变量   -- 将游标向下移一行,将获取到的数据放入之前定义的游标变量中

5.while @@fetch_status=0  -- 判断fetch语句是否执行成功

6.关闭游标:close 游标名

7.释放游标:deallocate 游标名
1 fetch next from namecursor into @cursor
2 while @@ @@fetch_status = 0
3 BEGIN
4        sql语句
5        fetch next from namecursor into @cursor
6 END
7 
8 -- 注意: 用两次 “FETCH NEXT FROM ” 是因为,第一次只是用来判断 @@FETCH_STATUS的,后面一次 “FETCH NEXT FROM ” 才是 loop用到的,也就是后面一次 是在 BEGIN END之间,是被反复执行的。每次读取一行。

 

猜你喜欢

转载自www.cnblogs.com/lita07/p/10980404.html