临时表解析

来源:互联网 发布:ubuntu修复grub引导 编辑:程序博客网 时间:2024/06/03 20:24

--==============================================
作者:王运亮(wwwwgou)
时间:2011-04-16
博客:http://blog.csdn.net/wwwwgou
--==============================================
#1.临时表与永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除
#2.临时表有两种类型:本地和全局,区别如下:
1. 本地临时表以#开头,仅对当前的用户连接是可见的,当用户从SQL Server实例断开连接时被删除.
 1.在MSSM中新建一个查询(相当于新建一个连接)
 2.执行SQL: CREATE TABLE #temp(id INT)
 3.查询此表在系统对象表中是否存在SQL:
 SELECT [name] FROM sys.tables WHERE [object_id] = object_id('tempdb..#temp', 'u')
 /*
 #temp__________________________000000000010  --系统为表名自动添加了唯一标识.这里省略了一些'_'字符
 */
 4.再新建一个连接,创建一个名为#temp的临时表(执行步骤2),当然,系统会自动为它添加唯一标识
 SELECT [name] FROM sys.tables WHERE [name] like '%temp%'
 /*
 #temp__________________________000000000010
 #temp__________________________000000000011
 */
 5.关闭查询窗口(相当于断开连接),#temp自动删除.
2. 全局临时表以##开头,创建后对任何用户都是可见的,当所有引用该表的用户从SQL Serve 断开连接时被删(注意此句话的含义).
 1.在MSSM中新建一个查询
 2.执行SQL: CREATE TABLE ##temp(id INT)
 3.查询此表在系统对象表中是否存在SQL:
 SELECT [name] FROM sys.tables WHERE [object_id] = object_id('tempdb..##temp', 'u')
 /*
 ##temp  --注意,系统未为表名添加唯一标识
 */
 4.再新建一个连接,如果再执行步骤2会报错: There is already an object named '##temp' in the database.但可以引用##temp表: SELECT * FROM ##temp
 SELECT [name] FROM sys.tables WHERE [name] like '%temp%'
 /*
 #temp__________________________000000000010
 ##temp
 #temp__________________________000000000011
 */
 5.关闭查询窗口(相当于断开连接),##temp在最后一个引用(指的是正在用)##temp的窗口断开时自动删除
#3.表变量可以当普通变量来理解.它会存储在内存中(系统会自动计算,如果内存不够用,则存储在tempdb中)
#4.会话和连接的区别: 比较相似,但不完全相同. 通俗的意思就是:会话指的是和表数据的交流.连接指的是同数据库的交流.查看当前数据库的连接个数SQL:
   SELECT * FROM master..sysprocesses WITH(NOLOCK) WHERE [DBID] = DB_ID('db_name')

原创粉丝点击