易截截图软件、单文件、免安装、纯绿色、仅160KB

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

巧用SQL的全局临时表防止用户重复登录
文章来自:http://www.cnblogs.com/lindayyh/archive/2010/04/05/1704763.html
在我们开发商务软件的时候,常常会遇到这样的一个问题:怎样防止用户重复登录我们的系统?特别是对于银行或是财务部门,更是要限制用户以其工号身份多次登入。
可能会有人说在用户信息表中加一字段判断用户工号登录的状态,登录后写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)


相关文档:

值得收藏的Microsoft SQL Server下的SQL语句

SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作。
一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssq ......

db2 V8的有关SQL limits

The following tables describe certain SQL
limits. Adhering to the most restrictive case can help the programmer
design application programs that are easily portable.
Table 7. Identifier Length Limits
Description
Limit in Bytes
Longest authorization
name (can only be single-byte characters) ......

SQL、PL/SQL学习笔记


 
1.SQL并行查询
alter session enable parallel dml execute immediate 'alter session enable parallel dml'; --修改会话并行DML      select /*+parallel(a,4)*/ * from table_name a       select /*+parallel(a,8)*/ * from table_name a &nbs ......

jsp连接sql2005

在管理工具里面有数据源   选择sql数据源
在代码中:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page  import="java.sql.*"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content= ......

PL/SQL游标总结

游标:指向处理SQL语句的环境区域的指针或句柄
-----|-1 静态游标
       |---1.1 隐式游标
       |          处理:INSERT,DELETE,UPDATE及返回一行的SELECT语句
       | ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号