deallocate?sql中deallocate是什么
大家好,今天来为大家分享deallocate的一些知识点,和sql中deallocate是什么的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
sql中deallocate是什么
DEALLOCATE
删除游标引用。当释放最后的游标引用时,组成该游标的数据结构由 Microsoft® SQL Server™释放。
语法
DEALLOCATE{{ [ GLOBAL ] cursor_name}|@cursor_variable_name}
参数
cursor_name
是已声明游标的名称。当全局和局部游标都以 cursor_name作为它们的名称存在时,如果指定 GLOBAL,则 cursor_name引用全局游标,如果未指定 GLOBAL,则 cursor_name引用局部游标。
@cursor_variable_name
是 cursor变量的名称。@cursor_variable_name必须为 cursor类型。
注释
对游标进行操作的语句使用游标名称或游标变量引用游标。DEALLOCATE删除游标与游标名称或游标变量之间的关联。如果一个名称或变量是最后引用游标的名称或变量,则将释放游标,游标使用的任何资源也随之释放。用于保护提取隔离的滚动锁在 DEALLOCATE上释放。用于保护更新(包括通过游标进行的定位更新)的事务锁一直到事务结束才释放。
DECLARE CURSOR语句分配游标并使其与游标名称关联:
DECLARE abc SCROLL CURSOR FOR
SELECT* FROM authors
游标名称与某个游标关联之后,该游标在释放之前不能用作相同作用域(GLOBAL或 LOCAL)内另一个游标的名称。
游标变量使用下列两种方法之一与游标关联:
通过名称,使用 SET语句将游标设置为游标变量:
DECLARE@MyCrsrRef CURSOR
SET@MyCrsrRef= abc
也可以不定义游标名称而创建游标并使其与变量关联:
DECLARE@MyCursor CURSOR
SET@MyCursor= CURSOR LOCAL SCROLL FOR
SELECT* FROM titles
DEALLOCATE@cursor_variable_name语句只删除对游标命名变量的引用。直到批处理、存储过程或触发器结束时变量离开作用域,才释放变量。在 DEALLOCATE@cursor_variable_name语句之后,可以使用 SET语句使变量与另一个游标关联。
USE pubs
GO
DECLARE@MyCursor CURSOR
SET@MyCursor= CURSOR LOCAL SCROLL FOR
SELECT* FROM titles
DEALLOCATE@MyCursor
SET@MyCursor= CURSOR LOCAL SCROLL FOR
SELECT* FROM sales
GO
不必显式释放游标变量。变量在离开作用域时被隐性释放。
权限
默认情况下,将 DEALLOCATE权限授予任何有效用户。
示例
下面的脚本显示游标如何持续到最后的名称或持续到引用它们的变量已释放。
USE pubs
GO
-- Create and open a global named cursor that
-- is visible outside the batch.
DECLARE abc CURSOR GLOBAL SCROLL FOR
SELECT* FROM authors
OPEN abc
GO
-- Reference the named cursor with a cursor variable.
DECLARE@MyCrsrRef1 CURSOR
SET@MyCrsrRef1= abc
-- Now deallocate the cursor reference.
DEALLOCATE@MyCrsrRef1
-- Cursor abc still exists.
FETCH NEXT FROM abc
GO
-- Reference the named cursor again.
DECLARE@MyCrsrRef2 CURSOR
SET@MyCrsrRef2= abc
-- Now deallocate cursor name abc.
DEALLOCATE abc
-- Cursor still exists, referenced by@MyCrsrRef2.
FETCH NEXT FROM@MyCrsrRef2
-- Cursor finally is deallocated when last referencing
-- variable goes out of scope at the end of the batch.
GO
-- Create an unnamed cursor.
DECLARE@MyCursor CURSOR
SET@MyCursor= CURSOR LOCAL SCROLL FOR
SELECT* FROM titles
-- The following statement deallocates the cursor
-- because no other variables reference it.
DEALLOCATE@MyCursor
GO
sql中declare是什么意思
sql中declare是声明的意思,就是声明变量的,这个一般是用在函数和存储过程中的。比如说,这个存储过程是,只要你把学号输入进来,就能查询这个学生的班级。那么在这个存储过程里面,学号就是参数。你给什么学号,它就返回给你相应的班级。又或者你也可以做成,只要你输入学号,这个存储过程就会将这个学生删除。
mysql存储过程中,定义变量有两种方式:
1.使用set或select直接赋值,变量名以@开头.
例如:set@var=1;
可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量。
2.以 DECLARE关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:
DECLARE var1 INT DEFAULT 0;
主要用在存储过程中,或者是给存储传参数中。
两者的区别是:
在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。
在存储过程中,使用动态语句,预处理时,动态内容必须赋给一个会话变量。
例:
set@v_sql= sqltext;
PREPARE stmt FROM@v_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
有的时候在查询更新数据库的时候,需要多条语句的查询,因此需要多次修改
declare可以满足多次执行,但数据只修改一次。
declare@local_variable data_type
DECLARE:定义变量,变量第一个字母是“@”
声明时需要指定变量的类型,
可以使用set和select对变量进行赋值,
在sql语句中就可以使用@local_variable来调用变量
声明中可以提供值,否则声明之后所有变量将初始化为NULL。
文章分享到这里,希望我们关于deallocate和sql中deallocate是什么的内容能够给您带来一些新的认识和思考。如果您还有其他问题,欢迎继续探索我们的网站或者与我们交流,我们将尽力为您提供满意的答案。