利用sql的全局临时表防止用户重复登录

利用sql的全局临时表防止用户重复登录

ID:8999926

大小:21.44 KB

页数:3页

时间:2018-04-14

利用sql的全局临时表防止用户重复登录_第1页
利用sql的全局临时表防止用户重复登录_第2页
利用sql的全局临时表防止用户重复登录_第3页
资源描述:

《利用sql的全局临时表防止用户重复登录》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

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

2、       /* 寻找以操作员工号命名的全局临时表    * 如无则将out参数置为0并创建该表,如有则将out参数置为1    * 在connection断开连接后,全局临时表会被SQL Server自动回收     * 如发生断电之类的意外,全局临时表虽然还存在于tempdb中,但是已经失去活性    * 用object_id函数去判断时会认为其不存在.  */  @v_userid varchar(6), -- 操作员工号    @i_out int out -- 输出参数 0:没有登录 1:已经登录    as    declare @v_sq

3、l 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。  

4、  这样,我们在我们的应用程序中调用该过程时,如果取得的out参数为1时,我们可以毫不客气地跳出一个message告诉用户说”对不起,此工号正被使用!”上面还涉及到一个OBJECT_ID()函数: Syntax:OBJECT_ID('[database_name.[schema_name]. 

5、schema_name. object_name' [,'object_type'])一般语法:intobject_id('objectname');此方法返回数据库对象标识号。其中,参数objectname表示要使用的对象,其数据类型为nchar或char(如果

6、为char,系统将其转换为nchar)object_type:为可选参数,其数据类型为nchar或char(如果为char,系统将其转换为nchar),指明架构范围的对象类型(object_name为字符串通过它,可以说明这个字符串究竟是说明对象,其列表见文章结尾) ps:使用OBJECT_ID不能查询非架构范围内的对象(如DDL触发器)。对于在sys.objects目录视图中找不到的对象,需要通过查询适当的目录视图来获取该对象的标识号。例如,若要返回DDL触发器的对象标识号,请使用SELECTOBJECT_IDFROMsys.triggersWHERE

7、name='DatabaseTriggerLog'。 返回类型为int,表示该对象在系统中的编号,如果找不到或发生错误一律返回NULL。 例子:A.返回数据库AdventureWorks中Production.WorkOrder表的标识号 USE master;GOSELECT OBJECT_ID(N'AdventureWorks.Production.WorkOrder') AS 'Object ID';GO B.存在性检查下列会确认资料表有物件的标识码,藉此检查指定的资料表是否存在。如果存在就删除。USE AdventureWorks;GOIF OB

8、JECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULLDROP TABLE dbo.AWBuildVersion;GO此方法一般用来判断数据库中本来用没有此对象(procedures,views,functions等).注意:当该参数对系统函数可选时,则系统采用当前数据库、主机、服务器用户或数据库用户。内置函数后面必须跟圆括号。如果指定一个临时表名,除非当前数据库为tempdb(废话),否则必须在临时表名前面加上数据库名,例如:SELECTOBJECT_ID('tempdb..#mytemptable')

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。