- 浏览: 2022889 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (1409)
- asp/asp.net学习 (241)
- oracle (10)
- delphi (295)
- java (27)
- pb (1)
- 每日点滴 (49)
- 学习方法 (40)
- 思想方面 (104)
- C语言 (5)
- C++ (1)
- 代码重构经验 (5)
- 软件工程 (3)
- 数据库 (99)
- 英语学习 (3)
- mysql (1)
- 该关注的网站或者网页 (42)
- 总结 (7)
- 要去做的事情 (33)
- 算法 (1)
- 网络方面 (29)
- 随感 (96)
- 操作系统 (36)
- UML (12)
- 常用工具的使用 (55)
- 脚本 (7)
- 汇编 (62)
- 数据结构 (2)
- 财务 (38)
- 语文作文 (16)
- 法律 (1)
- 股票 (88)
最新评论
-
devwang_com:
可以,学习了~~
列出文件夹下所有文件夹的树形结构--Dos命令 tree的使用 -
hvang1988:
不管用啊 frxrprt1.PreviewForm.Pare ...
fastReport预览时嵌入到别的窗体 -
00915132:
我也有这个疑问,非常 感 谢
left join加上where条件的困惑 --SQL优化 -
zhuyoulong:
学习了,高效读书
软件架构师要读的书 -
nTalgar:
非常感谢分享!
Application.ProcessMessages用法:
转自:http://blog.163.com/im_foto/blog/static/49085060200942511938865/
SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。
临时表有两种类型:
本地临时表:本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft SQL Server 2000 实例断开连接时被删除。
全局临时表:全局临时表的名称以数学符号 (##) 打头,创建后对任何用户都是可见的。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。
例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。如果创建名为 #employees 的本地临时表,只有您能对该表执行操作且在断开连接时该表删除。如果创建名为 ##employees 的全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在您创建后有其他用户使用,则 SQL Server在所有用户断开连接后删除该表。
现在,临时表的许多传统用途可由具有 table 数据类型的变量替换。
2、ORACLE
Oracle支持临时表。临时表用来保存事务或会话期间的中间结果。在临时表中保存的数据只有对当前会话是可见的,任何会话都不能看到其他会话的数据,即使在当前会话COMMIT数据以后也是不可见的。多用户并行不是问题,一个会话从来不阻塞另一个会话使用临时表。即使锁定临时表,一个会话也不会阻塞其他会话使用临时表。临时表比正常表产生的REDO少得多,然而,由于临时表必须产生包含数据的UNDO信息,所以会产生一定数量的REDO日志。
临时表将从用户临时表空间的的目前日志中分配空间,或者如果从有定义权的程序中访问,将使用程序所有者的临时表空间。全局临时表实际上只是表本身的模板。创建临时表的行为不包括存储空间的分配,也不包括INITIAL的分配。因此,在运行时当一个会话首先将数据放到临时表中时,这时将创建这个会话的临时段。由于每个会话获取自己的临时段,每个用户可能在不同的表空间中为临时表分配空间。USER1的default临时表空间为TEMP1,他的临时表将从 TEMP1中分配空间,USER2的default临时表空间为TEMP2,他的临时表将从TEMP2中分配空间。
临时表在每个数据库中只需创建一次,不必在每个存储过程中创建。临时表总是存在的,除非手动的删除他。临时表作为对象存在数据字典中,并且总是保持为空,直到有会话在其中放入数据。Oracle允许创建基于临时表的视图和存储过程。
临时表可以是以会话为基础的,也可以是以事务为基础的。ON COMMIT PRESERVE ROWS子句使临时表成为基于会话的模式。行将留在此表中,直到会话断开或通过DELETE或TRUNCATE从物理上删除这些行。ON COMMIT DELETE ROWS子句使临时表成为基于事务的模式。当会话提交后,行消失。这个临时表的自动清除过程不会有额外的开销。
在oracle中,应用程序需要的临时表应该在程序安装时创建,而不是在程序运行时创建。(这是与ms sqlserver或sybase的使用的不同)
在任何数据库中,临时表的一个缺点是:事实上优化器在临时表中没有真正的统计功能。然而,在oracle中,一系列较好的统计猜测可以通过DBMS_STATS包在临时表中设置。
3、DB2
可使用 DECLARE GLOBAL TEMPORARY TABLE 语句来定义临时表。DB2的临时表是基于会话的,且在会话之间是隔离的。当会话结束时,临时表的数据被删除,临时表被隐式卸下。对临时表的定义不会在SYSCAT.TABLES中出现
下面是定义临时表的一个示例:
DECLARE GLOBAL TEMPORARY TABLE gbl_temp
LIKE empltabl
ON COMMIT DELETE ROWS
NOT LOGGED
IN usr_tbsp
此语句创建一个名为 gbl_temp 的用户临时表。定义此用户临时表 所使用的列的名称和说明与 empltabl 的列的名称和说明完全相同。隐式定义只包括列名、数据类型、可为空特性和列缺省值属性。未定义所有其他列属性,包括唯一约束、外部关键字约束、触发器和索引。执行 COMMIT 操作时,若未对该表打开 WITH HOLD 游标,则该表中的所有数据都被删除。不记录对用户临时表所作的更改。用户临时表被放在指定的用户临时表空间中。此表空间必须存在,否则此表的声明将失败。
户定义临时表不支持:
? LOB 类型的列(或基于 LOB 的单值类型列)
? 用户定义类型列
? LONG VARCHAR 列
? DATALINK 列
其创建方法:
create table TempTableName,
或
select [字段1,字段2,...,] into TempTableName from table ,如上所说.
而后便可像使用常规表一样使用它们.
临时表其实是放在数据库tempdb里的一个用户表
分两种:
一种是以#(局部)或##(全局)开头的表,这种表在会话期间存,会话结束则自动删除;
另一种,如果创建时不以#或##开头,而用tempdb.TempTable来命名它,则该表可在数据库重启前一直存在.
以上两种都可手动用
drop table TempTableName 来删除.
请参考---动态sql语句基本语法
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?
declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
DECLARE @fname varchar(20),
@dyni_SQL varchar(8000),
@pcur_day varchar(20)
create table #tp_res(
f1 smalldatetime NULL,
f2 smallint NULL,
f3 float NULL
)
set @fname='f1'
set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (''' + @pcur_day + ''')'
exec (@dyni_SQL)
select * from #tp_res
drop table #tp_res
--需要注意,如果字段是数值型,不要用单引号,其他如字符型和日期型都要单引号即:
set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (' + cast(@pcur_day as varchar(50)) + ')'
示例:
select * into #tb_demo from employee
select * into #tb_demo1 from jobs
select * from #tb_demo left join #tb_demo1 on #tb_demo.job_id=#tb_demo1.job_id
drop table #tb_demo
drop table #tb_demo1
发表评论
-
sql 保留两位小数
2011-09-30 15:25 112101. ROUND(该函数,只是负责四舍五入到两位小数, ... -
Sql获取星期几的方法
2011-09-26 11:14 15521. select Datepart(weekday, ... -
SQL DATEDIFF语法及时间函数
2011-08-11 19:29 1454摘自:http://apps.hi.baidu.com/sha ... -
比较两个数据库的不同 包括表结构 视图 存储过程等
2011-07-22 18:02 996比较两个数据库的不同 包括表结构 视图 存储过程等 h ... -
SQL Server 2005调试触发器
2011-07-10 18:35 1324摘自:http://blog.csdn.net/zwk_9/a ... -
如何查找所有包含了某个文本的存储过程
2011-06-09 11:16 796select name from sysobjects o, ... -
使用pivot将行转成列
2011-05-17 16:46 1075摘自:http://blog.csdn.net/happy66 ... -
如何监控SQL Server (2005/2008) 的运行状况
2011-04-15 14:01 1145如何监控SQL Server (2005/2008) 的运行状 ... -
SQL中的各种JOIN(inner join,full outer join,left join,right join,cross join )
2011-04-14 13:43 986SQL中的各种JOIN(inner join,full ... -
TSQL中 Count() 函数使用的一点小技巧
2011-04-09 10:32 1882TSQL中 Count() 函数使用的一点小技巧 ... -
MsSql2005数据库熟悉
2011-04-01 17:32 15742011-4-11. 终于把那个模 ... -
知道了远程服务器的IP,以及端口号 如何连接
2011-04-01 12:33 1601问题描述:知道了远程服务器的IP,以及端口号 如何连接 ... -
varchar(max) 定义最大化 MsSql2005
2011-03-31 10:54 1140在存储过程里: declare @CreateScript ... -
在存储过程里使用N前缀 Mssql
2011-03-31 10:16 20092011-3-31 摘自:Mssql 2005的帮助页 ... -
经典的三表练习 sql
2011-03-25 14:05 1177create table s --学生表( sid in ... -
sql 这样写,有什么好处?函数列在字段里
2011-03-24 18:34 1206表格:aat 两个字段:a,b select dbo.get ... -
批量导出sql server 的视图、表、存储过程脚本
2011-03-18 17:39 3132批量导出sql server 的视图、表、存储过程脚本 ... -
asp.net连接Access SQL SERVER Oracle
2011-03-11 16:14 1143摘自:http://blog.csdn.net/m ... -
left join加上where条件的困惑 --SQL优化
2011-03-10 15:29 36918left join加上where条件的困惑 摘自:http: ... -
sql server行级锁,排它锁,共享锁的使用
2011-03-08 08:36 1433sql server行级锁,排它锁 ...
相关推荐
sql临时表相关介绍,可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。 本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_...
资源名称:SQLServer中临时表与表变量的区别内容简介: 本文档主要讲述的是SQLServer中临时表与表变量的区别;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看。资源截图: 资源太大,传百度网盘了,...
SQL Server 中判断表或临时表是否存在 在 SQL Server 中判断表或临时表是否存在是非常重要的操作,以下将详细介绍如何判断表或临时表是否存在。 判断数据表是否存在 判断数据表是否存在可以使用两种方法。 方法...
浅谈SQL数据库中滥用临时表、排序的解决方案
该工具利用Excel快速生成SQL Server和MySQL的临时表、多行快速合 1、支持SQL Server和MySQL的with语句以及临时表 2、支持自定义至多3列 3、支持多行,行上限为Excel的最大行数。(只需要把结果生成列第三行的公式...
SQL Server中关于临时表概念及创建和插入数据等问题 本地临时表 全局临时表 在程序中向临时表插入数据时报错……
1、局部临时表(#开头)只对当前连接有效,当前连接断开时自动删除。 2、全局临时表(##开头)对其它连接也有效,在当前连接和其他访问过它的连接都断开时自动删除。 3、不管局部临时表还是全局临时表,只要连接有...
。
。
。
。
oracle查找定位占用临时表空间较大的SQL语句方法,包括:(1)造成临时表空间暴涨的SQL还在运行中(2)造成临时表空间暴涨的SQL已经运行过了。
此文档中详细的记载了,sql server触发器中自动生成的临时表,希望可以帮到有需要的朋友们!
#资源达人分享计划#
好像并没有for和foreach这种类型的功能呀,不过关于数据库遍历最常见的方法当然是大家经常会想到的游标啦,但是这次我并没有使用游标,而是通过创建临时表的方式来更新遍历数据的。 为什么不使用游标,而使用创建...
SQL临时表递归查询子信息并返回记录的代码,需要的朋友可以参考下
创建临时表用于查询 sql server
sqlserver 循环临时表插入数据到另一张表 -- 声明变量 DECLARE @SupCode as varchar(100), @ProdCode as varchar(50), @PackLayer as varchar(50), @CodeStatus as varchar(50), @ProductId as varchar(50), @...
主要介绍了sql的临时表使用小结,需要的朋友可以参考下
"Oracle 临时表(事务级、会话级)" Oracle 临时表是 Oracle 数据库中的一种特殊类型的表,它可以保存...在 Oracle 中,临时表可以分为事务级和会话级,而在 SQL Server 中,临时表可以分为本地临时表和全局临时表。