临时表解析

    技术2022-05-20  38

    --==============================================作者:王运亮(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')


    最新回复(0)