巧用SQL server的全局临时表防止用户重复登录

在我们开发商务软件的时候,常常会遇到这样的一个问题:怎样防止用户重复登录我们的系统?特别是对于银行或是财务部门,更是要限制用户以其工号身份多次登入。

可能会有人说在用户信息表中加一字段判断用户工号登录的状态,登录后写1,退出时写0,且登录时判断其标志位是否为1,如是则不让该用户工号登录。但是这样那势必会带来新的问题:如发生象断电之类不可预知的现象,系统是非正常退出,无法将标志位置为0,那么下次以该用户工号登录则不可登入,这该怎么办呢?

或许我们可以换一下思路:有什么东西是在connection断开后可以被系统自动回收的呢?对了,SQL Server的临时表具备这个特性!但是我们这里的这种情况不能用局部临时表,因为局部临时表对于每一个connection来说都是一个独立的对象,因此只能用全局临时表来达到我们的目的。

好了,情况已经明朗话了,我们可以写一个象下面这样简单的存储过程:

create procedure gp_findtemptable -- 2001/10/26
21:36 zhuzhichao in nanjing
/* 寻找以操作员工号命名的全局临时表
* 如无则将out参数置为0并创建该表,如有则将out参数置为1
* 在connection断开连接后,全局临时表会被SQL Server自动回收
* 如发生断电之类的意外,全局临时表虽然还存在于tempdb中,
但是已经失去活性
* 用object_id函数去判断时会认为其不存在.
*/
@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告诉用户说”对不起,此工号正被使用!”

(测试环境:服务器:winnt server 4.0 SQL Server7.0 工作站:winnt workstation)

时间: 2024-10-08 19:26:44

巧用SQL server的全局临时表防止用户重复登录的相关文章

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

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

sql server使用全局临时表的Jsp页面出现 TDSExecuteRequest(TDSRequest).processReply(BaseWarning

问题描述 连接数据库的文件源码:dataconn.javapackagedataconn;importjava.sql.*;publicclassdataconn{StringsConnStr="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=BugFree";Stringuser="sa";Stringpassword="sa";Connectionconn=null;Stateme

巧用SQL server临时表

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

SQL Server中的临时表

SQL Server中的临时表 官方:https://technet.microsoft.com/zh-cn/library/ms177399(v=sql.105).aspx . https://technet.microsoft.com/zh-cn/library/ms186986(v=sql.105).aspx 临时表                                 &              

sql server 2012Windows 和账户登录模式都无法登录

问题描述 sql server 2012Windows 和账户登录模式都无法登录 之前曾经装过sql2012 解决方案 你要使用安装时的帐号登录windows, 也就是给sql server登录权限的那个windows帐号. 有可能你更换了windows帐户,或者你安装时添加的是别的windows帐号 解决方案二: 解决方案三: Sql Server2012 报表服务中的SharePoint集成模式配置SQL Server2012登录记录怎么删除?Sql server 日记 (登录账户) 解决方

sql-新装的SQL server 2014无法用windows身份验证登录

问题描述 新装的SQL server 2014无法用windows身份验证登录 刚装好的SQL,系统是win8.1,用的是本机的Microsoft账号,以前登录没问题的. 前几天还原了电脑然后装完SQL就进去不了.网上的解决方法都是针对2005 2008的,2014不知如何解决错误提示:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: Named Pip

tfs2010用户-SQL Server Reporting Services 涉及到用户列表都无法加载

问题描述 SQL Server Reporting Services 涉及到用户列表都无法加载 解决方案 http://blog.csdn.net/hadstj/article/details/11178971

将MS SQL SERVER数据库运行在普通用户(独立用户)状态下的设置方法终结篇

看了脚本之家网上的很多文章,整理了如下步骤,基本上可以说是终结解决方法了,这里给详细的整理下了, 希望可以帮助更新的朋友,让我们的服务器更加安全.脚本之家奉献. 首先是大家已经安装好了sqlserver 企业版. 第一步: Win2003 MSSQL以普通用户运行安全设置篇 这个里面主要是讲解了,普通用户的创建与设置,但需要注意的是,权限的设置 C盘需要以下权限: C:\administrators 全部权限 System 全部权限 IIS_WPG只读与运行的权限(只应用在当前文件夹) SQL2

如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码

server|服务器 SQL Server 7.0 数据转换服务 (DTS) 对象传输功能可在两台服务器之间传输登录和用户,但它不传输 SQL Server 验证登录的密码.要从一台运行 SQL Server 7.0 的服务器向另一台运行 SQL Server 7.0 的服务器传输登录和密码,请按照本文"在 Master 数据库中创建和运行存储过程"一节中的说明操作.您将在源服务器上创建 sp_help_revlogin 存储过程.此过程将生成一个脚本,您可以在目标服务器上运行该脚本,