那临时表的生命周期到底是多长
14 个解决方案
#1
/*
1、局部临时表(#开头)只对当前连接有效,当前连接断开时自动删除。
2、全局临时表(##开头)对其它连接也有效,在当前连接和其他访问过它的连接都断开时自动删除。
3、不管局部临时表还是全局临时表,只要连接有访问权限,都可以用drop table #Tmp(或者drop table ##Tmp)来显式删除临时表。
*/
#2
临时表
临时表有两种类型:本地表和全局表。在与首次创建或引用表时相同的 SQL Server 实例连接期间,本地临时表只对于创建者是可见的。当用户与 SQL Server 实例断开连接后,将删除本地临时表。全局临时表在创建后对任何用户和任何连接都是可见的,当引用该表的所有用户都与 SQL Server 实例断开连接后,将删除全局临时表。
临时表有两种类型:本地表和全局表。在与首次创建或引用表时相同的 SQL Server 实例连接期间,本地临时表只对于创建者是可见的。当用户与 SQL Server 实例断开连接后,将删除本地临时表。全局临时表在创建后对任何用户和任何连接都是可见的,当引用该表的所有用户都与 SQL Server 实例断开连接后,将删除全局临时表。
#3
1、如果不显式删除临时表,局部临时表(#开头)的生命周期是产生这个临时表的连接关闭的时候自动删除,全局临时表(#开头)的生命周期是使用过这个临时表的所有连接关闭的时候自动删除。
2、为了不出现临时表已经存在的情况,应该在差生临时表前或者使用临时表后显式删除临时表,使用drop table语句
2、为了不出现临时表已经存在的情况,应该在差生临时表前或者使用临时表后显式删除临时表,使用drop table语句
#4
这是这个
很详细
#5
临时表只在一个会话过程中存在,比如执行一个存储,在执行过程中是有效的,执行完该存储,临时表自动消失。
#6
顶
#7
原来是这样的啊,了解了,以前一直不清楚了,今天学习了,呵呵
#8
正解,全局临时表能不用就不用
#9
SQL Server 实例连接期间,本地临时表只对于创建者是可见的, 我想问一下假如有一百个用户同时用sa的帐号创建,是不是对于这一百个用户来说都是可见的呢,
#10
创建者是指登入的帐号,还是指创建的IP地址,假如是IP地址,那么还是不可见的.
#11
帮顶。理解不同,结果也不同。
#12
补充点:在Sql 2005中,定义临时表还可以@开头(如:declare @table table(id bigint))
#13
临时表有两种,局部的和全局的.和普通表的表面上的区别就是 分别以#和##开头.她们是保存在磁盘上的tempdb数据库里的
例子如下:
接下来就是临时表的存在范围了.局部临时表(以下简称#表),则在一个procedure和batch里面.如果超出超范围则无效.
1 下面以例子佐证,创建存储过程如下:
这时你在SSMS里面输入
这时查出的TABLE_NAME 并不是你#temptest.这正是此表仅在proc下有效.
返回如下message:
Msg 208, Level 16, State 0, Line 1
Invalid object name '#temptest'.
2这时你再新建查询 即点击New Query,有同样的命令查询,结果是一样的.因为它更不是在同一个会话下的.
3 如果你是在tempdb里面直接创建临时表,这时你用
下的TABLE_NAME去查询该表,它和你创建的表名是一致的.但是如果你执照2步骤,仍然会提示无此对象.
4 如果是全局临时表,即##table.则3中情况不会出现.即是它的会话期要比#table的广些.
5 还要补充下,如果你在不同的 查询环境 创建同名的临时表,他们也是不同的表.这就是会话和临时表的含义.想看到不同可以用
查看自己定义的同名的表名
我的结果如下:
#temptest3__________________________________________________________________________________________________________000000000004
#temptest3__________________________________________________________________________________________________________000000000007
记住后面的12位正是标志不同的,所以一个临时表的长度定义最长为116位
6至于删除等操作,拥有会话权限,在session下就可... 连接(SSMS)是会话,不同用户下也是,新建个查询也是,存储过程亦然....
7 断开SSMS则局部和全局的临时表均不存在.同样用5里面的命令.结果刚才建立的临时表不复存在....
例子如下:
create table #producttemp
(productno int primary key)
接下来就是临时表的存在范围了.局部临时表(以下简称#表),则在一个procedure和batch里面.如果超出超范围则无效.
1 下面以例子佐证,创建存储过程如下:
use testshen
create/*alter*/ proc prctest
as
select 3
create table #temptest
(id int,
ename varchar(12)
)
insert into #temptest values(1,'test')
select * from #temptest
exec prctest
这时你在SSMS里面输入
use tempdb
select * from INFORMATION_SCHEMA.TABLES
这时查出的TABLE_NAME 并不是你#temptest.这正是此表仅在proc下有效.
use tempdb
select * from #temptest
返回如下message:
Msg 208, Level 16, State 0, Line 1
Invalid object name '#temptest'.
2这时你再新建查询 即点击New Query,有同样的命令查询,结果是一样的.因为它更不是在同一个会话下的.
3 如果你是在tempdb里面直接创建临时表,这时你用
use tempdb
select * from INFORMATION_SCHEMA.TABLES
下的TABLE_NAME去查询该表,它和你创建的表名是一致的.但是如果你执照2步骤,仍然会提示无此对象.
4 如果是全局临时表,即##table.则3中情况不会出现.即是它的会话期要比#table的广些.
5 还要补充下,如果你在不同的 查询环境 创建同名的临时表,他们也是不同的表.这就是会话和临时表的含义.想看到不同可以用
use tempdb
select * from INFORMATION_SCHEMA.TABLES
查看自己定义的同名的表名
我的结果如下:
#temptest3__________________________________________________________________________________________________________000000000004
#temptest3__________________________________________________________________________________________________________000000000007
记住后面的12位正是标志不同的,所以一个临时表的长度定义最长为116位
6至于删除等操作,拥有会话权限,在session下就可... 连接(SSMS)是会话,不同用户下也是,新建个查询也是,存储过程亦然....
7 断开SSMS则局部和全局的临时表均不存在.同样用5里面的命令.结果刚才建立的临时表不复存在....
#14
look
#1
/*
1、局部临时表(#开头)只对当前连接有效,当前连接断开时自动删除。
2、全局临时表(##开头)对其它连接也有效,在当前连接和其他访问过它的连接都断开时自动删除。
3、不管局部临时表还是全局临时表,只要连接有访问权限,都可以用drop table #Tmp(或者drop table ##Tmp)来显式删除临时表。
*/
#2
临时表
临时表有两种类型:本地表和全局表。在与首次创建或引用表时相同的 SQL Server 实例连接期间,本地临时表只对于创建者是可见的。当用户与 SQL Server 实例断开连接后,将删除本地临时表。全局临时表在创建后对任何用户和任何连接都是可见的,当引用该表的所有用户都与 SQL Server 实例断开连接后,将删除全局临时表。
临时表有两种类型:本地表和全局表。在与首次创建或引用表时相同的 SQL Server 实例连接期间,本地临时表只对于创建者是可见的。当用户与 SQL Server 实例断开连接后,将删除本地临时表。全局临时表在创建后对任何用户和任何连接都是可见的,当引用该表的所有用户都与 SQL Server 实例断开连接后,将删除全局临时表。
#3
1、如果不显式删除临时表,局部临时表(#开头)的生命周期是产生这个临时表的连接关闭的时候自动删除,全局临时表(#开头)的生命周期是使用过这个临时表的所有连接关闭的时候自动删除。
2、为了不出现临时表已经存在的情况,应该在差生临时表前或者使用临时表后显式删除临时表,使用drop table语句
2、为了不出现临时表已经存在的情况,应该在差生临时表前或者使用临时表后显式删除临时表,使用drop table语句
#4
这是这个
很详细
#5
临时表只在一个会话过程中存在,比如执行一个存储,在执行过程中是有效的,执行完该存储,临时表自动消失。
#6
顶
#7
原来是这样的啊,了解了,以前一直不清楚了,今天学习了,呵呵
#8
正解,全局临时表能不用就不用
#9
SQL Server 实例连接期间,本地临时表只对于创建者是可见的, 我想问一下假如有一百个用户同时用sa的帐号创建,是不是对于这一百个用户来说都是可见的呢,
#10
创建者是指登入的帐号,还是指创建的IP地址,假如是IP地址,那么还是不可见的.
#11
帮顶。理解不同,结果也不同。
#12
补充点:在Sql 2005中,定义临时表还可以@开头(如:declare @table table(id bigint))
#13
临时表有两种,局部的和全局的.和普通表的表面上的区别就是 分别以#和##开头.她们是保存在磁盘上的tempdb数据库里的
例子如下:
接下来就是临时表的存在范围了.局部临时表(以下简称#表),则在一个procedure和batch里面.如果超出超范围则无效.
1 下面以例子佐证,创建存储过程如下:
这时你在SSMS里面输入
这时查出的TABLE_NAME 并不是你#temptest.这正是此表仅在proc下有效.
返回如下message:
Msg 208, Level 16, State 0, Line 1
Invalid object name '#temptest'.
2这时你再新建查询 即点击New Query,有同样的命令查询,结果是一样的.因为它更不是在同一个会话下的.
3 如果你是在tempdb里面直接创建临时表,这时你用
下的TABLE_NAME去查询该表,它和你创建的表名是一致的.但是如果你执照2步骤,仍然会提示无此对象.
4 如果是全局临时表,即##table.则3中情况不会出现.即是它的会话期要比#table的广些.
5 还要补充下,如果你在不同的 查询环境 创建同名的临时表,他们也是不同的表.这就是会话和临时表的含义.想看到不同可以用
查看自己定义的同名的表名
我的结果如下:
#temptest3__________________________________________________________________________________________________________000000000004
#temptest3__________________________________________________________________________________________________________000000000007
记住后面的12位正是标志不同的,所以一个临时表的长度定义最长为116位
6至于删除等操作,拥有会话权限,在session下就可... 连接(SSMS)是会话,不同用户下也是,新建个查询也是,存储过程亦然....
7 断开SSMS则局部和全局的临时表均不存在.同样用5里面的命令.结果刚才建立的临时表不复存在....
例子如下:
create table #producttemp
(productno int primary key)
接下来就是临时表的存在范围了.局部临时表(以下简称#表),则在一个procedure和batch里面.如果超出超范围则无效.
1 下面以例子佐证,创建存储过程如下:
use testshen
create/*alter*/ proc prctest
as
select 3
create table #temptest
(id int,
ename varchar(12)
)
insert into #temptest values(1,'test')
select * from #temptest
exec prctest
这时你在SSMS里面输入
use tempdb
select * from INFORMATION_SCHEMA.TABLES
这时查出的TABLE_NAME 并不是你#temptest.这正是此表仅在proc下有效.
use tempdb
select * from #temptest
返回如下message:
Msg 208, Level 16, State 0, Line 1
Invalid object name '#temptest'.
2这时你再新建查询 即点击New Query,有同样的命令查询,结果是一样的.因为它更不是在同一个会话下的.
3 如果你是在tempdb里面直接创建临时表,这时你用
use tempdb
select * from INFORMATION_SCHEMA.TABLES
下的TABLE_NAME去查询该表,它和你创建的表名是一致的.但是如果你执照2步骤,仍然会提示无此对象.
4 如果是全局临时表,即##table.则3中情况不会出现.即是它的会话期要比#table的广些.
5 还要补充下,如果你在不同的 查询环境 创建同名的临时表,他们也是不同的表.这就是会话和临时表的含义.想看到不同可以用
use tempdb
select * from INFORMATION_SCHEMA.TABLES
查看自己定义的同名的表名
我的结果如下:
#temptest3__________________________________________________________________________________________________________000000000004
#temptest3__________________________________________________________________________________________________________000000000007
记住后面的12位正是标志不同的,所以一个临时表的长度定义最长为116位
6至于删除等操作,拥有会话权限,在session下就可... 连接(SSMS)是会话,不同用户下也是,新建个查询也是,存储过程亦然....
7 断开SSMS则局部和全局的临时表均不存在.同样用5里面的命令.结果刚才建立的临时表不复存在....
#14
look