mysql创建临时表select_SELECT INTO创建临时表 SQL Server
SQL
Server临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。本地临时表的名称以单个数字符号
(#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以两个数字符号
(##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。
如果数据库会话创建了本地临时表
#temtable,则仅会话可以使用该表,会话断开连接后就将该表删除。如果创建了 ##temtable全局临时表,则数据库中的任何用户均可使用该表。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果您创建该表后另一个用户在使用该表,则SQL
Server 将在您断开连接并且所有其他会话不再使用该表时将其删除。
如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则SQL Server 必须能够区分由不同用户创建的表。为此,SQL
Server 在内部为每个本地临时表的表名追加一个数字后缀。存储在tempdb 数据库的 sysobjects 表中的临时表,其全名由
CREATE TABLE
语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名table_name不能超过 116
个字符。
当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。
临时表位于tempdb系统数据库。
使用SELECT
INTO语句可以把任何查询结果集放置到一个新表中,还可以通过使用SELECT INTO语句解决复杂的问题。例如,需要从不同数据源中得到数据集,如果一开始先创建一个临时表,那么在该表上执行查询比在多表或多数据库中执行查询更简单。
在使用SELECT INTO语句时,应该注意如下的事项和原则:
可以使用SELECT INTO语句创建一个表并且在单独操作中向表中插入行。确保在SELECT
INTO语句中指定的表名是惟一的。如果表名出现重复,SELECT INTO语句将失败。
可以创建本地或全局临时表。要创建一个本地临时表,需要在表名前加符号(#);要创建一个全局临时表,需要在表名前加两个符号(##)。本地临时表只在当前的会话中可见,全局临时表在所有的会话中都可见。
当使用者结束会话时,本地临时表的空间会被回收。
当创建表的会话结束且当前参照表的最后一个Transact-SQL语句完成时,全局临时表的空间会被回收。
使用SELECT INTO语句的基本语法如下:
SELECT
INTO new_table
FROM {}[,…n]
WHERE
例如:select * into #newTable from news where
s_date>'2010-3-1'
利用SQL Server的全局临时表防止用户重复登录
在我们开发商务软件的时候,常常会遇到这样的一个问题:怎样防止用户重复登录我们的系统?特别是对于银行或是财务部门,更是要限制用户以其工号身份多次登入。
可能会有人说在用户信息表中加一字段判断用户工号登录的状态,登录后写1,退出时写0,且登录时判断其标志位是否为1,如是则不让该用户工号登录。但是这样那势必会带来新的问题:如发生象断电之类不可预知的现象,系统是非正常退出,无法将标志位置为0,那么下次以该用户工号登录则不可登入,这该怎么办呢?
或许我们可以换一下思路:有什么东西是在connection断开后可以被系统自动回收的呢?对了,SQL Server的临时表具备这个特性!但是我们这里的这种情况不能用局部临时表,因为局部临时表对于每一个connection来说都是一个独立的对象,因此只能用全局临时表来达到我们的目的。
好了,情况已经明朗话了,我们可以写一个象下面这样简单的存储过程:
create procedure gp_findtemptable -- 2001/10/26 21:36 zhuzhichao in
nanjing
@v_userid varchar(6), -- 操作员工号
@i_out int out -- 输出参数 0:没有登录 1:已经登录
as
declare @v_sql varchar(100)
if object_id('tempdb.dbo.##'+@v_userid)
is null
begin
set @v_sql = 'create table ##'+@v_userid+'(userid varchar(6))'
exec (@v_sql)
set @i_out = 0
end
else
set @i_out = 1
在这个过程中,我们看到如果以用户工号命名的全局临时表不存在时过程会去创建一张并把out参数置为0,如果已经存在则将out参数置为1。
这样,我们在我们的应用程序中调用该过程时,如果取得的out参数为1时,我们可以毫不客气地跳出一个message告诉用户说”对不起,此工号正被使用!”
判断方法范例:
select @sTmpWareA="tempdb..[##MARWareA"+ @ComputerName+"]"
if exists (select * from tempdb..sysobjects where id =
object_id(@sTmpWareA) and type = "U")
begin
set @sTmpWareA="[##MARWareA"+ @ComputerName+"]"
exec( "drop table " )
end
else
set @sTmpWareA="[##MARWareA"+ @ComputerName+"]"
@sTmpWareA 就是临时表的名称,过程中使用exec来操作
mysql创建临时表select_SELECT INTO创建临时表 SQL Server相关推荐
- db2 mysql sql server_下文给大家介绍mysql数据库介绍,具体详情如下所示:MySQL数据库:Oracle、DB2、SQL Server、MySQL、access、mang...
下文给大家介绍mysql数据库介绍,具体详情如下所示: MySQL 数据库: Oracle.DB2.SQL Server.MySQL.access.mangodb.bigtable 关系型数据库 大型 ...
- mysql的事件探查器_用SQL Server事件探查器创建跟踪
SQL Server事件探查器(Profiler)可以帮助数据库管理员跟踪SQL Server数据库所执行的特定事件,监视数据库的行为;并将这些有价值的信息保存到文件或表,以便以后用来分析解决数据库出 ...
- sql创建表主键gui_在SQL Server中使用主数据服务快速创建最终用户可以维护的GUI
sql创建表主键gui 介绍 ( Introduction ) Oft times we are forced into situations where we clearly need to thi ...
- mysql修改存储过程名称的sql_修改SQL SERVER内置存储过程_mysql
sqlserver估计是为了安装或者其它方面,它内置了一批危险的存储过程.能读到注册表信息,能写入注册表信息,能读磁盘共享信息等等--各位看到这儿,心里可能会在想,我的网站中有其它的代码,又不像查询分 ...
- mysql bak 还原数据库文件格式_Navicat操作SQL server 2008R2文件.bak文件还原
项目操作过程中,利用Navicat操作SQL Server2008R2数据备份,结果发现数据丢失了很多,不得不先对数据丢失部分进行差异对比,然后再重新输入. 1.利用Navicat导出的数据格式为sq ...
- mysql中如何调整列的顺序,SQL Server 数据库调整表中列的顺序操作
SQL Server 数据库中表一旦创建,我们不建议擅自调整列的顺序,特别是对应的应用系统已经上线,因为部分开发人员,不一定在代码中指明了列名.表是否可以调整列的顺序,其实可以自主设置,我们建议在安装 ...
- c# mysql 触发器 实时,C#-.Net SqlDataAdapter和SQL Server中的触发器
我在SQL Server中使用触发器,该触发器在SQL Server Management Studio的查询窗口中执行查询时按要求工作.触发器的目的是从一个表中获取最新值(其中一个ID对应于插入的I ...
- mysql错误18456_【问题解决】SQL2008 SQL Server身份认证方式登录失败(错误18456)解决方法图解...
今天同事电脑本地数据库,用SQL Server身份认证登录不了,后来解决了,突然想起自己曾经也遇到过这个问题,所以还是在这里记录下. 问题报错截图如下: 解决方法步骤截图如下: 1.打开本地数据库-- ...
- win2008 mysql端口_使用自定义端口连接SQL Server 2008的方法
使用过SQL Server的人大多都知道,SQL Server服务器默认监听的端口号是1433,但是我今天遇到的问题是我的机器上有三个数据库实例,这样使用TCP/IP远程连接时就产生了问题.如何在Mi ...
最新文章
- R语言plot函数可视化、ggplot2可视化把图像标题(title)的部分内容着色实战:标题的部分内容配置不同的色彩、副标题(subtitle)的内容配置不同的色彩
- 未捕获ReferenceError:未定义$?
- 注重网站用户体验优化就要避开前方弯道
- 【Java 网络编程】网络相关概念
- faster rcnn可视化(修改demo.py保存网络中间结果)
- 设计模式整理之简单工厂
- 利剑无意之面试题(三)
- 强化学习原理与python实现原理pdf_纯Python实现!Facebook发布PyTorch分布式强化学习库...
- 第5课 开心的金明《聪明人的游戏:信息学探秘.提高篇》
- Java讲课笔记11:构造方法与this关键字
- 使用printf函数输出其ascii。_输入一个N*N的矩阵,将其转置后输出。要求:不得使用任何数组(就地逆置)。...
- TensorFlow入门篇(三):MNIST数据集简易分类
- (转)机会还是陷阱:诺亚财富的私募股权策略
- 二广高速公路4标段道路设计--武汉理工大学本科生毕业设计
- 华为笔记本linux好不好,华为笔记本怎么样
- 静心的全部秘密:你是观照者
- 创意小发明:山寨码表.自行车码表的制作 程序原理图,设计图,源代码
- 80c51流水灯汇编语言,利用80c51单片机制作流水灯(汇编语言)
- Django练习——基于Mysql的登录注册功能界面(django模型、模板、表单简单应用)
- pyramid框架_Python Pyramid Web框架简介
热门文章
- 南卡、漫步者、万魔蓝牙耳机哪个好?500以下蓝牙耳机评测对比
- 拒做小白鼠 今年的你没必要买一部5G手机
- window cmd bat批处理杀端口对应的进程
- 关于图像快速缩放算法,目前看到的最好的最清晰的一篇文章
- 全球及中国废纸再生利用市场竞争风险与投资建议分析报告2022年
- OSChina 周日乱弹 ——大白,我对这个世界好失望
- speedoffice(Excel)如何插入艺术字
- 更改word 默认字体_更改Word中的默认字体大小
- 基于python的公众号课堂教学_基于Python的微信公众号数据挖掘分析
- mealy machine和moore machine