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

1.临时表

临时表与永久表相似,但临时表存储在 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
(0)

相关推荐

  • sqlserver游标使用步骤示例(创建游标 关闭游标)

    游标(cursor)是一个存储在DBMS服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集.在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据. 使用游标 使用游标的步骤: 在使用游标前,必须声明(定义)它.这个过程实际上没有检索数据,它只是定义要使用的SELECT语句和游标选项.一旦声明,就必须打开游标以供使用.这个过程用前面定义的SELECT语句把数据实际检索出来.对于填有数据的游标,根据需要取出(检索)各行.在结束游标使用时,必须关闭游标,可能的话,释放

  • SQL Server 向临时表插入数据示例

    复制代码 代码如下: INSERT INTO #DirtyOldWIPBOM SELECT TOP (100) PERCENT dbo.WIP_BOM.Model, dbo.WIP_BOM.PartNumber,WIP_BOM.WIP FROM dbo.WIP_BOM left OUTER JOIN dbo.BOM_CHINA ON LTRIM(dbo.WIP_BOM.Model) = LTRIM(dbo.BOM_CHINA.Model) AND LTRIM(dbo.WIP_BOM.PartNu

  • sql server 创建临时表的使用说明

    临时表产生:A: SELECT INTO和B:CREATE TABLE + INSERT INTO 1. A 要比B 快很多.但是A会锁定tempdb的SYSOBJECTS.SYSINDEXES.SYSCOLUMNS表,在多用户并发的时候,容易产生阻塞其他的进程. 2. 在并发系统中是用B. 大数量的单个语句中,使用A. 创建临时表的方法: 方法一:      create table #临时表名(字段1 约束条件,                       字段2 约束条件,        

  • Mysql存储过程中游标的用法实例

    本文实例讲述了Mysql存储过程中游标的用法.分享给大家供大家参考.具体如下: 1. 批量插入商户路由关联数据: DELIMITER $$ USE `mmm_mac`$$ DROP PROCEDURE IF EXISTS `批量插入商户路由关联数据`$$ CREATE DEFINER=`root`@`%` PROCEDURE `批量插入商户路由关联数据`() BEGIN DECLARE v_partner_no VARCHAR(32); DECLARE v_partner_id INT(11);

  • 浅析SQL server 临时表

    创建临时表,#代表局部临时表,##代表全局临时表.局部临时表和全局临时表的具体含义是什么呢? 举例说明一下比较清晰些,先来看下局部临时表,[新建查询],在里面输入如下文本: 运行后,我们在此文件执行输入: select * from #tempTable, 执行后可以查询出如下的数据: 我们另外打开一个[新建查询],就给其命名为新建查询2,在新建查询2中执行输入: select * from #tempTable,提示如下: 修改Sql 语句中的#tempTable 为 ##tempTable,

  • sql 取代游标的写法示例

    Update Tb_Garden1 G Set Steward = ( Select Id From Zyq.Tb_User U Where Replace(U.Name, '区') = G.Name And Rownum =1) where exists (select 1 from zyq.tb_user u where Replace(U.Name, '区') = G.Name And rownum = 1)

  • MySQL中临时表的基本创建与使用教程

    当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询. 创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字: CREATE TEMPORARY TABLE tmp_table ( name VARCHAR(10) NOT NULL, value INTEGER NOT NULL ) 临时表将在你连接MySQL期间存在.当

  • sql的临时表使用小结

    1.创建方法: 方法一: create table TempTableName 或 select [字段1,字段2,...,] into TempTableName from table 方法二: create table tempdb.MyTempTable(Tid int) 说明: (1).临时表其实是放在数据库tempdb里的一个用户表: (2).TempTableName必须带"#","#"可以是一个或者两个,以#(局部)或##(全局)开头的表,这种表在会话

  • 解析Mysql临时表及特点

    临时表是当连接没有断开时存在,一旦断开就不会存在,临时表的数据和结构都在内存中,可以做个测验,你创建一个临时表,但是到响应的数据目录下并不会找到.frm文件mysql> CREATE TEMPORARY TABLE tmp_table (    ->    -> name VARCHAR(10) NOT NULL,    -> value INTEGER NOT NULL    ->    -> ) ;Query OK, 0 rows affected (0.38 se

  • MS SQL Server游标(CURSOR)的学习使用

    说实的,使用MS SQL Server这样久,游标一直没有使用过.以前实现相似的功能,都是使用WHILE循环加临时表来实现.刚才有参考网上示例练习写了一下.了解到游标概念与语法. 下面代码示例中, 先是宣告你在游标中需使用变量,也就是临时存储处理字段的数据. 2. 宣告一个游标,并SELECT需要处理的数据集. 3. 打开游标(#8行代码). 4. 从游标中拿来FETCH NEXT 数据给变量赋值. 5. 循环@@FETCH_STATUS = 0条件. 6. 在循环块,可以处理第一笔的记录逻辑了

  • sql 游标的使用—游标FOR循环小例子

    例子: 显示emp表所有雇员名及其工资: 复制代码 代码如下: declarecursor emp_cursor is select ename,sal from emp ;beginfor emp_record in emp_cursor loopdbms_output.put_line('姓名: '||emp_record.ename||' , 工资: '||emp_record.sal);end loop;end ;/ anonymous block completed姓名: SMITH

随机推荐