国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

利用SQL Server的全局臨時表防止用戶重復登錄

2024-08-31 00:48:26
字體:
來源:轉載
供稿:網友

    在我們開發商務軟件的時候,常常會遇到這樣的一個問題:怎樣防止用戶重復登錄我們的系統?特別是對于銀行或是財務部門,更是要限制用戶以其工號身份多次登入。

        可能會有人說在用戶信息表中加一字段判斷用戶工號登錄的狀態,登錄后寫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.##'[email protected]_userid) is null

begin

        set @v_sql = 'create table ##'[email protected]_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)


收集最實用的網頁特效代碼!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 依兰县| 台安县| 子洲县| 贵溪市| 资溪县| 辉县市| 桐庐县| 大埔区| 丹寨县| 定州市| 锦州市| 台东县| 虹口区| 安庆市| 龙山县| 蒲城县| 宿迁市| 清原| 县级市| 雷波县| 抚顺县| 永泰县| 洛宁县| 屯门区| 沧州市| 新密市| 抚州市| 宝应县| 漯河市| 铜鼓县| 通海县| 鄯善县| 凌云县| 太康县| 神池县| 徐闻县| 阳城县| 剑川县| 临城县| 宝山区| 黔东|