SQLServer临时表和游标的使用摘要

1。临时表

临时表是类似于永久表,但临时表存储在tempdb和自动删除,当它不再被使用。

两种类型的临时表是本地的和全局的。

2者比较。

签本地临时表的名称(#)

仅对当前用户连接可见。

连接断开时,用户实例将自动删除。

签一个全局临时表的名称(# #)

任何用户都可见

当引用表断开的所有用户断开时,它将自动删除。

In fact, the local temporary table has a unique name in tempdb

例如,我们使用SA登录一个查询分析器,并使用SA登录到另一个查询分析器。

在2个查询分析器中,我们都允许以下语句:


使用酒吧

SELECT *为# TEM工作


分别为2个用户创建了2个本地临时表。

我们可以从下面的查询中看到




SELECT * FROM { tempdb }。{ } { }中dbo。
哪里的xtype = U


确定临时表的存在:




如果object_id('tempdb .. # TEM)是无效的
开始
print'exists
终点
其他的
开始
print'not存在
终点



特别提示:

1、语句完成后,动态SQL语句中创建的本地临时表将自动删除。

所以下面的语句没有得到结果集




exec(从工作‘*为# TEMS)
SELECT * FROM # TEMS


2、存储过程中使用的临时表在进程完成后自动删除。

但是推荐显式删除,这对系统是有益的。

ii.cursor

游标还具有本地和全局两种类型。

本地游标:仅在声明阶段使用

全局游标:可用于声明其进程、外部使用触发器。

存在判断:




如果cursor_status(全球、游标)= 3和cursor_status(乡土、游标)= 3
开始
print'not存在
终点
SELECT * FROM { tempdb }。{ } { }在sysobjects dbo。xtype = U


确定临时表的存在:




如果object_id('tempdb .. # TEM)是无效的
开始
print'exists
终点
其他的
开始
print'not存在
终点


特别提示:

1、语句完成后,动态SQL语句中创建的本地临时表将自动删除。

所以下面的语句没有得到结果集




exec(从工作‘*为# TEMS)
SELECT * FROM # TEMS


2、存储过程中使用的临时表在进程完成后自动删除。

但是推荐显式删除,这对系统是有益的。

ii.cursor

游标还具有本地和全局两种类型。

本地游标:仅在声明阶段使用

全局游标:可用于声明其进程、外部使用触发器。

存在判断:




如果cursor_status(全球、游标)= 3和cursor_status(乡土、游标)= 3
开始
print'not存在
终点
SELECT * FROM { tempdb }。{ } { }在sysobjects dbo。xtype = U


确定临时表的存在:


如果object_id('tempdb .. # TEM)是无效的
开始
print'exists
终点
其他的
开始
print'not存在
终点



特别提示:

1、语句完成后,动态SQL语句中创建的本地临时表将自动删除。

所以下面的语句没有得到结果集




exec(从工作‘*为# TEMS)
SELECT * FROM # TEMS


2、存储过程中使用的临时表在进程完成后自动删除。

但是推荐显式删除,这对系统是有益的。

ii.cursor

游标还具有本地和全局两种类型。

本地游标:仅在声明阶段使用

全局游标:可用于声明其进程、外部使用触发器。

存在判断:




如果cursor_status(全球、游标)= 3和cursor_status(乡土、游标)= 3
开始
print'not存在
终点