




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQLSERVER临时表的使用.txt48微笑,是春天里的一丝新绿,是骄阳下的饿一抹浓荫,是初秋的一缕清风,是严冬的一堆篝火。微笑着去面对吧,你会感到人生是那样温馨。SQLSERVER临时表的使用droptable#Tmp-删除临时表#Tmpcreatetable#Tmp-创建临时表#Tmp(IDintIDENTITY(1,1)notnull,创建列ID,并且每次新增一条记录就会加WokNoprimarykey(ID);varchar(50),定义ID为临时表#Tmp的主键Select*from#Tmp-查询临时表的数据truncatetable#Tmp-清空临时表的所有数据和约束相关例子:D
2、eclareWoknoVarchar(500)-用来记录职工号DeclareStrNVarchar(4000)-用来存放查询语句DeclareCountint-求出总记录数DeclareiintSeti=0SelectCount=Count(Distinct(Wokno)from#TmpWhileiCountBeginSetStr=Selecttop1Wokno=WokNofrom#TmpWhereidnotin(Selecttop+Str(i)+idfrom#Tmp)ExecSp_ExecuteSqlStr,NWokNoVarchar(500)OutPut,WokNoOutputSelect
3、WokNo,i-一行一行把职工号显示出来Seti=i+1End临时表可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。本地临时表的名称前面有一个编号符(#table_name),而全局临时表的名称前面有两个编号符(#table_name)。SQL语句使用CREATETABLE语句中为table_name指定的名称引用临时表:CREATETABLE#MyTempTable(colaINTPRIMARYKEY)INSERTINTO#MyTempTableVALUES(1)如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则SQLServer必须能够
4、区分由不同用户创建的表。为此,SQLServer在内部为每个本地临时表的表名追加一CREATETABLE个数字后缀。存储在tempdb数据库的sysobjects表中的临时表,其全名由语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名table_name不能超过116个字符。除非使用DROPTABLE语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去:当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。所有其它本地临时表在当前会话结束时自动除去。
5、全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个Transact-SQL语句的生存周期内保持。换言之,当创建全局临时表的会话结束时,最后一条引用此表的Transact-SQL语句完成后,将自动除去此表。在存储过程或触发器中创建的本地临时表与在调用存储过程或触发器之前创建的同名临时表不同。如果查询引用临时表,而同时有两个同名的临时表,则不定义针对哪个表解析该查询。嵌套存储过程同样可以创建与调用它的存储过程所创建的临时表同名的临时表。嵌套存储过程中对表名的所有引用都被解释为是针对该嵌套过程所创建的表,例如:CREATEPROCEDURETest2ASCRE
6、ATETABLE#t(xINTPRIMARYKEY)INSERTINTO#tVALUES(2)SELECTTest2Col=xFROM#tGOCREATEPROCEDURETest1ASCREATETABLE#t(xINTPRIMARYKEY)INSERTINTO#tVALUES(1)SELECTTest1Col=xFROM#tEXECTest2GOCREATETABLE#t(xINTPRIMARYKEY)INSERTINTO#tVALUES(99)GOEXECTest1GO下面是结果集:(1row(s)affected)Test1Col(1row(s)affected)Test2Col2当创
7、建本地或全局临时表时,CREATETABLE语法支持除FOREIGNKEY约束以外的其它所有约束定义。如果在临时表中指定FOREIGNKEY约束,该语句将返回警告信息,指出此约束已被忽略,表仍会创建,但不具有表。FOREIGNKEY约束。在FOREIGNKEY约束中不能引用临时考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或多个存储过程或函数需要使用表值时,临时表很有用。通常,表变量提供更有效的查询处理。SQLSERVER临时表的使用SQLSERVER临时表的使用-删除临时表#Tmpcreatetable#Tmp-创建临时表#Tmp(IDintIDENTITY(1,1)not
8、null,创建列ID,并且每次新增一条记录就会加1WokNovarchar(50),primarykey(ID)定义ID为临时表#Tmp的主键);Select*from#Tmp-查询临时表的数据truncatetable#Tmp-清空临时表的所有数据和约束相关例子:DeclareWoknoVarchar(500)-用来记录职工号DeclareStrNVarchar(4000)-用来存放查询语句DeclareCountint-求出总记录数DeclareiintSeti=0SelectCount=Count(Distinct(Wokno)from#TmpWhileiCountBeginSetStr
9、=Selecttop1Wokno=WokNofrom#TmpWhereidnotin(Selecttop+Str(i)+idfrom#Tmp)ExecSp_ExecuteSqlStr,NWokNoVarchar(500)OutPut,WokNoOutputSelectWokNo,i-一行一行把职工号显示出来Seti=i+1End临时表可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。本地临时表的名称前面有一个编号符(#table_name),而全局临时表的名称前面有两个编号符(#table_name)。SQL语句使用CREATETABLE语句中为table_
10、name指定的名称引用临时表:CREATETABLE#MyTempTable(colaINTPRIMARYKEY)INSERTINTO#MyTempTableVALUES(1)Server必CREATE如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则SQL须能够区分由不同用户创建的表。为此,SQLServer在内部为每个本地临时表的表名追加一个数字后缀。存储在tempdb数据库的sysobjects表中的临时表,其全名由TABLE语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名table_name不能超过116个字符。除非使用DROPTABL
11、E语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去:当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表所有其它本地临时表在当前会话结束时自动除去。10000500000004800000015000005000009999100001000000000001000050000000480000001500000500000999910000100000000000全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个Transact-SQL
12、语句的生存周期内保持。换言之,当创建全局临时表的会话结束时,最后一条引用此表的Transact-SQL语句完成后,将自动除去此表。在存储过程或触发器中创建的本地临时表与在调用存储过程或触发器之前创建的同名临时表不同。如果查询引用临时表,而同时有两个同名的临时表,则不定义针对哪个表解析该查询。嵌套存储过程同样可以创建与调用它的存储过程所创建的临时表同名的临时表。嵌套存储过程中对表名的所有引用都被解释为是针对该嵌套过程所创建的表,例如:CREATEPROCEDURETest2ASCREATETABLE#t(xINTPRIMARYKEY)INSERTINTO#tVALUES(2)SELECTTest
13、2Col=xFROM#tGOCREATEPROCEDURETest1ASCREATETABLE#t(xINTPRIMARYKEY)INSERTINTO#tVALUES(1)SELECTTest1Col=xFROM#tEXECTest2GOCREATETABLE#t(xINTPRIMARYKEY)INSERTINTO#tVALUES(99)GOEXECTest1GO下面是结果集:(1row(s)affected)Test1Col1(1row(s)affected)Test2Col2当创建本地或全局临时表时,CREATETABLE语法支持除FOREIGNKEY约束以外的其它所有约束定义。如果在临时
14、表中指定FOREIGNKEY约束,该语句将返回警告信息,指出此约束已被忽略,表仍会创建,但不具有临时表。FOREIGNKEY约束。在FOREIGNKEY约束中不能引用考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或多个存储过程或函数需要使用表值时,临时表很有用。通常,表变量提供更有效的查询处理。表和表变量有什么区别什么时候用表好,什么时候用表变量好表是实体,数据保存在数据库文件内。表变量是一种特殊变量,只对当前会话有效。对于表变量,联机丛书如下描述:一种特殊的数据类型,用于存储结果集以供后续处理。该数据类型主要用于临时存储一组行,这些行将作为表值函数的结果集返回。尽可能使用表变量而不使用临时表。table变量有以下优点:table变量的行为类似于局部变量,有明确定义的作用域。该作用域为声明该变量的函数、存储过程或批处理。在其作用域内,table变量可像常规表那样使用。该变量可应用于SELECT、INSERT、UPDATE和DELETE语句中用到表或表的表达式的地方。但是,table不能用在下列语句中:INSERTINTOtable_variableEXEC存储过程。SELECTselect_listINTOtable_variable语句。在定义table变量的函数、存储过程或批处理结束时,自动清
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 超市转让合同范本
- 2025至2030年中国热弯玻璃数据监测研究报告
- 送货合同范本简单建材
- 供货责任补充协议
- 2025至2030年中国橡皮分牙圈数据监测研究报告
- 2025至2030年中国水冷电加热柜式空调机数据监测研究报告
- 2025至2030年中国模压胶木粉数据监测研究报告
- 基本农田保护协议
- 向阳街租房合同范本
- 2025至2030年中国托钩膨胀螺丝数据监测研究报告
- 教科版六年级下册科学第三单元《宇宙》教材分析及全部教案(定稿;共7课时)
- 急诊科的学科建设和人才培养
- 社会情感学习在学校中的推广
- 中国胎儿心脏超声检查指南
- 学校教育中的品牌塑造与校园文化建设培训课件
- 消防救援-低温雨雪冰冻恶劣天气条件下灾害防范及救援行动与安全
- 济南广播电视台面向社会招聘工作人员笔试参考题库(共500题)答案详解版
- 主播试用期合同模板
- 《市场营销学》吴建安
- 【公司会计信息化建设研究文献综述2000字】
- 沧州师范学院学士学位论文写作指南2020版
评论
0/150
提交评论