MS Sql Server临时表和游标的使用小总结

转载 2005年05月30日 11:18:00
i。临时表

临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。

临时表有局部和全局两种类型

 

2者比较:

局部临时表的名称以符号 (#) 打头

仅对当前的用户连接是可见的

当用户实例断开连接时被自动删除

 

全局临时表的名称以符号 (##) 打头

任何用户都是可见的

当所有引用该表的用户断开连接时被自动删除

 

 

实际上局部临时表在tempdb中是有唯一名称的

例如我们用sa登陆一个查询分析器,再用sa登陆另一查询分析器

 

2个查询分析器我们都允许下面的语句:

use pubs

go

select * into #tem from jobs

 

分别为2个用户创建了2个局部临时表

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

SELECT *

FROM [tempdb].[dbo].[sysobjects]

where xtype='u'

判断临时表的存在性:

if  object_id('tempdb..#tem'is not null
begin
    
print 'exists'
end
else
begin
    
print 'not exists'
end

特别提示:

1。在动态sql语句中创建的局部临时表,在语句运行完毕后就自动删除了

所以下面的语句是得不到结果集的

exec('select * into #tems from jobs')

select * from #tems

 

2。在存储过程中用到的临时表在过程运行完毕后会自动删除

但是推荐显式删除,这样有利于系统

ii。游标
游标也有局部和全局两种类型

局部游标:只在声明阶段使用
全局游标:可以在声明它们的过程,触发器外部使用


判断存在性:
if CURSOR_STATUS('global','游标名称'=-3 and CURSOR_STATUS('local','游标名称'=-3
begin 
    
print 'not exists'
end

SELECT *

FROM [tempdb].[dbo].[sysobjects]

where xtype='u'

判断临时表的存在性:

if  object_id('tempdb..#tem'is not null
begin
    
print 'exists'
end
else
begin
    
print 'not exists'
end

特别提示:

1。在动态sql语句中创建的局部临时表,在语句运行完毕后就自动删除了

所以下面的语句是得不到结果集的

exec('select * into #tems from jobs')

select * from #tems

 

2。在存储过程中用到的临时表在过程运行完毕后会自动删除

但是推荐显式删除,这样有利于系统

ii。游标
游标也有局部和全局两种类型

局部游标:只在声明阶段使用
全局游标:可以在声明它们的过程,触发器外部使用


判断存在性:
if CURSOR_STATUS('global','游标名称'=-3 and CURSOR_STATUS('local','游标名称'=-3
begin 
    
print 'not exists'
end

SELECT *

FROM [tempdb].[dbo].[sysobjects]

where xtype='u'

判断临时表的存在性:

if  object_id('tempdb..#tem'is not null
begin
    
print 'exists'
end
else
begin
    
print 'not exists'
end

特别提示:

1。在动态sql语句中创建的局部临时表,在语句运行完毕后就自动删除了

所以下面的语句是得不到结果集的

exec('select * into #tems from jobs')

select * from #tems

 

2。在存储过程中用到的临时表在过程运行完毕后会自动删除

但是推荐显式删除,这样有利于系统

ii。游标
游标也有局部和全局两种类型

局部游标:只在声明阶段使用
全局游标:可以在声明它们的过程,触发器外部使用


判断存在性:
if CURSOR_STATUS('global','游标名称'=-3 and CURSOR_STATUS('local','游标名称'=-3
begin 
    
print 'not exists'
end

MS Sql Server临时表和游标的使用小总结

1.临时表 临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。 临时表有局部和全局两种类型 2者比较: 局部临时表的名称以符号 (#) 打头 仅对当前的用户连接是可见的 当...
  • Tercel99
  • Tercel99
  • 2011年05月08日 18:38
  • 618

游标的结果集放入临时表

/**** 将游标遍历的结果集放入临时表中,最后读取临时表 ****/ CREATE  PROCEDURE [dbo].[cc] AS DECLARE @sql VARCHAR(40...
  • zzqw199012
  • zzqw199012
  • 2014年05月04日 15:46
  • 1745

MS-SQL游标的使用及理解

    与windows或DOS的“光标”不同,MS-SQL的游标是一种临时的数据库对象,既对可用来旋转储存在系统永久表中的数据行的副本,也可以指向储存在系统永久表中的数据行的指针。    游标为您提...
  • sxycgxj
  • sxycgxj
  • 2007年02月23日 21:51
  • 5589

Sql Server临时表和游标的使用小总结

Sql Server临时表和游标的使用小总结2008-06-23 22:451.临时表 临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。 临时表有局部和全局两种类型 ...
  • skyremember
  • skyremember
  • 2009年03月05日 18:52
  • 6939

SQL游标使用及实例

declare my_cursor cursor scroll dynamic /*scroll表示可随意移动游标指针(否则只能向前),dynamic表示可以读写游标(否则游标只读)*/forsele...
  • feng2375
  • feng2375
  • 2008年01月24日 16:34
  • 17814

临时表和游标的使用小总结

最近使用Db的机会比较多,现做了一些小总结: 临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。 临时表有局部和全局两种类型   2者比较: 局部临时表的名称以符号 (#)...
  • CQP
  • CQP
  • 2006年09月01日 00:00
  • 1606

sql 游标的基本用法

1. 定义游标定义游标语句的核心是定义了一个游标标识名,并把游标标识名和一个查询语句关联起来。DECLARE语句用于声明游标,它通过SELECT查询定义游标存储的数据集合。语句格式为:DECLARE ...
  • jack15850798154
  • jack15850798154
  • 2010年03月01日 11:14
  • 5049

Sqlserver中存储过程和游标的一些使用例子

/*带输入输出参数存储过程*/ ALTER PROCEDURE pro_test2 @userID INT, @maxUserID INT OUTPUT, @countUser INT OUTP...
  • smartsmile2012
  • smartsmile2012
  • 2016年11月21日 14:34
  • 4990

sqlserver游标使用和循环

/*** 游标的使用 讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱。 使用游标的顺序: 声名游标、打开游标、读取数据、关闭游标、删除游标。 1.3.1声明游标 最简单游标声明:DEC...
  • smartsmile2012
  • smartsmile2012
  • 2014年11月12日 14:50
  • 17858

把结果集放到临时表中的示例代码(使用游标)

declare @ActionDesc nvarchar(max)        --  一个策略字段:(目的是为了确认唯一的一行数据内容),联想到Group by的用法,              ...
  • zunguitiancheng
  • zunguitiancheng
  • 2013年06月18日 23:06
  • 824
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MS Sql Server临时表和游标的使用小总结
举报原因:
原因补充:

(最多只允许输入30个字)