初识临时表

  临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。 

  创建临时表有多种方法。其一,先创建表结构,跟创建普通表一样,只是表名多了个#号

create table #tmp
(
id int,
name varchar(50)
)

   有了表结构就可以给表添加数据,添加数据的方法,同普通表一样。

  其二,创建表同时插入数据 

select *  int #tmp from table_Name  //table_Name 为数据库中的普通表,在创建#tmp的时候自动将table_Name 中的数据填充到#tmp临时表中

  既然创建了表,我们就会联想到怎么删除表……同样有两种途径。其一,手动删除(drop table #tmp)。其二,当连接断开时,系统自动清除临时表。

  临时表又可以分为两类:本地和全局。如果创建了 employees 表,则任何在数据库中有使用该表的安全权限的用户都可以使用该表,除非已将其删除。如果数据库会话创建了本地临时表 #employees,则仅会话可以使用该表,会话断开连接后就将该表删除。如果创建了 ##employees 全局临时表,则数据库中的任何用户均可使用该表。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果您创建该表后另一个用户在使用该 表,则 SQL Server 将在您断开连接并且所有其他会话不再使用该表时将其删除。

  1、局部临时表(#开头)只对当前连接有效,当前连接断开时自动删除。   
  2、全局临时表(##开头)对其它连接也有效,在当前连接和其他访问过它的连接都断开时自动删除。   
  3、不管局部临时表还是全局临时表,只要连接有访问权限,都可以用drop table #Tmp(或者drop table ##Tmp)来显式删除临时表。  

  当创建本地或全局临时表时,CREATE TABLE 语法支持除 FOREIGN KEY 约束以外的其它所有约束定义。如果在临时表中指定 FOREIGN KEY 约束,该语句将返回警告信息,指出此约束已被忽略,表仍会创建,但不具有 FOREIGN KEY 约束。在 FOREIGN KEY 约束中不能引用临时表。

  考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或多个存储过程或函数需要使用表值时,临时表很有用。通常,表变量提供更有效的查询处理。

 

  在此,我用临时表做过的例子就是防止用户重复登录

      在我们开发商务软件的时候,常常会遇到这样的一个问题:怎样防止用户重复登录我们的系统?特别是对于银行或是财务部门,更是要限制用户以其工号身份多次登入。
  
  可能会有人说在用户信息表中加一字段判断用户工号登录的状态,登录后写1,退出时写0,且登录时判断其标志位是否为1,如是则不让该用户工号登录。但是这样那势必会带来新的问题:如发生象断电之类不可预知的现象,系统是非正常退出,无法将标志位置为0,那么下次以该用户工号登录则不可登入.

  

create procedure gp_findtemptable /* 寻找以操作员工号命名的全局临时表  * 如无则将out参数置为0并创建该表,如有则将out参数置为1  * 在connection断开连接后,全局临时表会被SQL Server自动回收   * 如发生断电之类的意外,全局临时表虽然还存在于tempdb中,但是已经失去活性  * 用object_id函数去判断时会认为其不存在.*/@v_userid varchar(6), -- 操作员工号@i_out int out -- 输出参数 0:没有登录 1:已经登录asdeclare @v_sql varchar(100)if object_id('tempdb.dbo.##'+@v_userid) is nullbeginset @v_sql = 'create table ##'+@v_userid+'(userid varchar(6))'exec (@v_sql)set @i_out = 0endelseset @i_out = 1


   在这个过程中,我们看到如果以用户工号命名的全局临时表不存在时过程会去创建一张并把out参数置为0,如果已经存在则将out参数置为1。

 

  上面还涉及到一个OBJECT_ID ()函数:

 

Syntax:

OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . object_name' [ ,'object_type' ] )

一般语法:int object_id('objectname');

此方法返回数据库对象标识号。

其中,参数objectname 表示要使用的对象,其数据类型为nchar或char(如果为char,系统将其转换为nchar)

object_type:为可选参数,其数据类型为nchar或char(如果为char,系统将其转换为nchar),指明架构范围的对象类型(object_name为字符串通过它,可以说明这个字符串究竟是说明对象,其列表见文章结尾)

 

ps:使用 OBJECT_ID 不能查询非架构范围内的对象(如 DDL 触发器)。对于在 sys.objects 目录视图中找不到的对象,需要通过查询适当的目录视图来获取该对象的标识号。例如,若要返回 DDL 触发器的对象标识号,请使用 SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'。

 

返回类型为int,表示该对象在系统中的编号,如果找不到或发生错误一律返回NULL。

 

例子:

A.返回数据库AdventureWorks中Production.WorkOrder表的标识号

 

USEmaster;
GO
SELECTOBJECT_ID(N'AdventureWorks.Production.WorkOrder') AS'Object ID';
GO

 

B.存在性检查

下列会确认资料表有物件的标识码,藉此检查指定的资料表是否存在。如果存在就删除。

USEAdventureWorks;
GO
IFOBJECT_ID(N'dbo.AWBuildVersion', N'U') ISNOTNULL
DROPTABLEdbo.AWBuildVersion;
GO

此方法一般用来判断数据库中本来用没有此对象(procedures,views,functions等).

注意:
当该参数对系统函数可选时,则系统采用当前数据库、主机、服务器用户或数据库用户。内置函数后面必须跟圆括号。 
如果指定一个临时表名,除非当前数据库为tempdb(废话),否则必须在临时表名前面加上数据库名,例如: 
SELECT OBJECT_ID('tempdb..#mytemptable')

 

 

Object_Type列表:

 

 

 

 

AF = 聚合函数 (CLR)
C = CHECK 约束
D = DEFAULT(约束或独立)
F = FOREIGN KEY 约束
FN = SQL 标量函数
FS = 程序集 (CLR) 标量函数
FT = 程序集 (CLR) 表值函数
IF = SQL 内联表值函数
IT = 内部表
P = SQL 存储过程
PC = 程序集 (CLR) 存储过程
PG = 计划指南
PK = PRIMARY KEY 约束
R = 规则(旧式,独立)
RF = 复制筛选过程
S = 系统基表
SN = 同义词
SQ = 服务队列
TA = 程序集 (CLR) DML 触发器
TF = SQL 表值函数
TR = SQL DML 触发器
U = 表(用户定义类型)
UQ = UNIQUE 约束
V = 视图
X = 扩展存储过程

 

转载于:https://www.cnblogs.com/xiangzhong/archive/2012/08/03/2621133.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米手机电池恢复代码_解决小米手机屏幕问题的方法

屏幕在我们的小米手机中永远不会失败,因为没有它,我们将无法使用可用的应用程序和功能。为了帮助大家,我们汇总了小米和Redmi手机中最常见的问题,为您提供了针对我们所面临的每种情况的解决方案。MIUI定制层汇集了适用于小米手机的…

Asterisk拨号方案语法基础

Asterisk语法基础 extensions.conf(四部分:context,extension,priorities,application) context:用于对extensions组命名,把拨号方案的不同部分进行分离,免得交织在一起。 表示方法是把名字放在[]的中间,名字只能用a~z,A~Z,0~9,以及连字号和下划线组成(空格不在允许的字符里…

使用promise解决回调地狱_「每日一题」Promise 是什么?

window.Promise 已经是 JS 的一个内置对象了。1. Promise 有规格文档吗?2. 你一般如何使用 Promise。-----------目前的 Promise 都遵循 Promises/A 规范。英文规范:https://promisesaplus.com/中文翻译:图灵社区 : 阅读 : 【翻译】Promises/…

应用css div进行页面布局设计,利用CSS与DIV进行页面布局.ppt

《利用CSS与DIV进行页面布局.ppt》由会员分享,可在线阅读,更多相关《利用CSS与DIV进行页面布局.ppt(6页珍藏版)》请在人人文库网上搜索。1、利用CSS与DIV进行页面布局,学习目标:,理解CSSDIV网页布局的含义掌握网页结构的规划掌握CSS样式的创建…

【原】winform高效导出Excel带格式设置

参考网上的方法修改,1000条记录导出只要3S(1GRDM,C2.8CPU).1.项目添加excel对象类库的引用,Microsoft Excel 11.0 object library(不同版本的Excel,类库不同,这是2003的) 2.代码1//-…

vscode 逗号不换行_来自一个插件的疯狂夸赞,VS Code「彩虹屁」插件问世,网友:我想要郭德纲版...

听说有人开发了「虚拟程序员鼓励师」,安装使用后的我疯狂捶墙,导致我家变成了单间。机器之心报道,机器之心编辑部。你可能从未想过,会有这么一个人:对你写的每一行代码都不吝夸赞,知道你什么时候想骂人&…

Asterisk拨号方案中变量的应用

在拨号方案中使用变量可以减少打字、增加清晰度,也有助于在拨号方案中加入逻辑. 这里的变量有全局变量,通道变量和环境变量。 1.全局变量 全局变量应该在extensions.conf文件的开始利用[globals]这个context定义或利用 SetGlobalVar()应用.如: [globals] 80000Zap/1或 [inter…

电压源和电流的关联参考方向_结点电压法解题系列之四:电流源支路

利用结点电压法求解时,有的结点之间连接的是电流源支路。如图1所示电路中,结点2与参考结点4之间连接的是5A电流源。对结点2列写标准形式KCL,或直接利用KCL列出结点电压方程,都很容易,也不易出错。只需要注意&#xff1…

狼人杀服务器紧急维护中,狼人杀最可怕的武器是那张嘴?禁言长老:你已被管理员禁言一天!...

语言的能力有多强?不论是用来攻击对手,或是讨好他人,讽刺或是欺骗,语言有着神秘的力量,仿佛能够颠倒黑白。对于那些"口吐芬芳"的人,更是恨不得在他嘴上贴个封条,让他好好安静一会。相…

炎炎夏日需要一个清凉的地 - 自制水冷系统(十一 指尖的思绪之程序篇)

前段时间接手了一个项目,所以DIY的进程有些停滞。实际编写的程序并没有多长时间,得益于Keil这个强大的IDE。能在第一次做51开发的时候,如此顺利的完成代码。不多说废话了,说明下代码的具体思路。具体思路根据(八 系统设…

wordpress 后台慢_建站经验-wordpress用户注册收不到验证邮件

背景我的一个博客http://axuretop.com,已经在后台开放注册了,注册用户默认为“订阅者”。一旦发布新的文章,会订阅邮件给用户。后台有300多个订阅用户,但是发现评论文章的很少,严重怀疑他们无法订阅我的文章&#xff0…

SIP.conf的常用参数配置

sip.conf Sip.conf 用于配置SIP通道。 [1005]------------------------------------------------------ 拨号方案实例 username1005----------------------------------------- 用户名typefriend----------------------------------------------- 类型,友好secret…

ai字体行间距怎么调整_字体基础知识(一)

本期教程主要讲解字体基础知识:字体、字号、字形、字重、行高、行距、字间距、字偶间距。本文所用软件为Microsoft PowerPoint 2013。1 字体文字的风格样式,就是我们平时常说的黑体、宋体、楷体、Segoe UI Black、Courier New、Consolas。如下图所示&…

免费的crm系统部署在自己的服务器,crm系统本地部署与云端部署的区别

CRM系统的部署方式通常有三种模式,分别是:本地部署、云端部署、公有云部署等三种模式。通常企业在选择的部署方式是本地部署与云端部署。那么他们部署方式得区别是什么?本地部署CRM系统本地部署的CRM软件:是意味着保存在企业自身的服务器中。…

gitee怎么仓库间传文件_实现一个简单的基于码云(Gitee) 的 Storage

实现一个简单的基于码云(Gitee) 的 StorageIntro上次在 asp.net core 从单机到集群 一文中提到存储还不支持分布式,并立了一个 flag基于 github 或者 开源中国的码云实现一个 storage于是这两天就来填坑了。。实现了一个简单的基于开源中国的码云的 storage准备工作…

extensions.conf的常用参数配置

extensions.conf 拨号方案配置文件,下面是一个简单的拨号方案,通过此处对拨号方案有一个简单的了解。 [from-sql]-----------对应sip配置文件中的context,由此关联执行相应的拨号方案。 exten > 111,1,Answer() -----拨打111的第一步操作&…

载波聚合或双连接的方式进行_智能电表常用远程抄表方式,您想知道吗?--老兵聊电之...

智能电表的远程抄表方式有多种方式,但老王更喜欢以下几种抄表方式,希望您能接受。一、智能电表的工作原理1.智能电表主要是由电子元器件构成,其工作原理是先通过对用户供电电压和电流的实时采样,再采用专用的电能表集成电路&#…

搞个服务器安装黑群晖系统,牛人闲置电脑大改造!超低成本组建家用黑群晖NAS...

一、前言:大家好,俺又来了。这篇原创很早就在构思怎么写了,因为确实作为一个数码爱好者来说,当得知有 群晖 威联通 这种NAS 的东西存在的时候,就忍不住想体验体验。但是奈何自己的资金不够,想一想&#xff…

立体旋转查看图片

声明:如果程序有问题,请各位大虾多多指点,谢谢。 基于psoft.js制作的一款立体旋转查看图片应用 1.可以通过鼠标滑动来操作图片的旋转,可以向右,向左拖动 a。向左滑动 b。向右滑动 c。向左转到一下 2.代码实现&#xff…

max file descriptors_年轻族的战场!宋MAX强势对比嘉际

随着社会的发展,人们对于汽车的要求也是越来越高,各大厂商为了吸引消费者的注意纷纷对旗下的车进行了改款,今天就带大家看看宋MAX对比嘉际外观:指标名称宋MAX嘉际长[mm]47104706宽[mm]18101909高[mm]16801690轴距[mm]27852805整备…