关于“游标”变量 和 “临时表”变量的疑问。问题一:
在多个存储过程中都声明使用了名称相同的临时表,比如:
IF OBJECT_ID('tempdb..#temptable') IS NOT NULL
DROP TABLE #temptable; 这样多个存储过程,对应于不同的作业并发运行,会不会发生冲突??? 发生相互影响的现象。
问题二:
在多个存储过程中都声明使用了[b]名称相同的游标[/b],比如:
DECLARE Cur CURSOR FOR
这样多个存储过程,对应于不同的作业并发运行,会不会发生冲突???
在多个存储过程中都声明使用了名称相同的临时表,比如:
IF OBJECT_ID('tempdb..#temptable') IS NOT NULL
DROP TABLE #temptable; 这样多个存储过程,对应于不同的作业并发运行,会不会发生冲突??? 发生相互影响的现象。
问题二:
在多个存储过程中都声明使用了[b]名称相同的游标[/b],比如:
DECLARE Cur CURSOR FOR
这样多个存储过程,对应于不同的作业并发运行,会不会发生冲突???
局部临时表的话不同会话之间不会有影响,创建后在tempdb 里面会以后缀区分问题2:
局部游标不会,全局游标会
什么是局部游标,什么又是全局游标嘞。
OBJECT_ID('tempdb..#temptable') 这个是全局临时表,还是局部历史表啊。
判断它是否存在,这里也没有指定回话啊。
临时表只对当前会话有效,全局临时表##会出现冲突
问题2:要用本地游标,不要指定全局游标(能常这是默认)
DECLARE Cur CURSOR LOCAL FOR
什么是局部游标,什么又是全局游标嘞。
OBJECT_ID('tempdb..#temptable') 这个是全局临时表,还是局部历史表啊。
判断它是否存在,这里也没有指定回话啊。局部游标还是全局游标可以参考#4的解释临时表的话 #TMPTB 是局部临时表,尽在当前会话有效,##TMPTB 就是全局临时表,其它会话也可以引用。
存储过程
IF OBJECT_ID('tempdb..#temptable') IS NOT NULL
DROP TABLE #temptable;
不同调用者,互补影响
局部临时表 用一个#号
create table ##tmp (id int)
create table #tmp (id int)
运行此二条命令后,再打开tempdb数据库,查看临时表
会发现表#tmp后加了很长的后缀
再就是说,不同连接中创建的局部临时表不会互相影响
与公用临时表就显示,##tmp