我是SQL小菜鸟---SQL全局临时表防止用户重复登录
先介紹一下什么是sql臨時表及使用方法
臨時表?
SQL Server 支持臨時表。臨時表就是那些名稱以井號 (#) 開頭的表。如果當用戶斷開連接時沒有除去臨時表,SQL Server 將自動除去臨時表。臨時表不存儲在當前數據庫內,而是存儲在系統數據庫 tempdb 內。?
臨時表有兩種類型:?
本地臨時表?
以一個井號 (#) 開頭的那些表名。只有在創建本地臨時表的連接上才能看到這些表。?
全局臨時表?
以兩個井號 (##) 開頭的那些表名。在所有連接上都能看到全局臨時表。如果在創建全局臨時表的連接斷開前沒有顯式地除去這些表,那么只要所有其它任務停止引用它們,這些表即被除去。當創建全局臨時表的連接斷開后,新的任務不能再引用它們。當前的語句一執行完,任務與表之間的關聯即被除去;因此通常情況下,只要創建全局臨時表的連接斷開,全局臨時表即被除去。?
--應用本地臨時表
declare?@sql?varchar(100)
set?@sql='select?''123''?as a,''abasdf''?as b into #t'
exec(@sql)
select?*?from?#t
go
/*發現不能正確顯示臨時表的數據
提示:
服務器: 消息 208,級別 16,狀態 1,行 5
對象名 '#t' 無效。
*/
--修改為全局臨時表
declare?@sql?varchar(100)
set?@sql='select?''123''?as a,''abasdf''?as b into ##t'
exec(@sql)
select?*?from?##t
drop?table?##t
go
/*可以正確顯示臨時表的數據
分析原因:exec(@sql) 相當于重新建立一個數據庫對話,所以對于本地臨時表,使用exec(@sql)創建臨時表,?
在exec外部不能正確訪問;而使用全局臨時表就ok了?
*/?
?為了防止用戶的重復登錄,在一開始想到的一種方法:
在用戶表中添加一個字段,登錄后寫1,退出后寫0.這樣子在用戶登錄進行檢查的時候判斷這個字段是否為0,如果是0那么就可以登錄;但是這樣子就又帶來了新的問題,如果在用戶正在登錄的過程中突然斷電,那么表中寫入的是1,也就是說用戶在以后的登錄中都不能能夠登錄系統了。
另外一種方法:在SQL Server中建立全局臨時表,如果用戶沒有登錄就建立一個臨時表來存放用戶,如果已經登錄那么就提醒用戶此賬號已經登錄;臨時表相比較上面一個方法的好處就在于:當系統與SQL Server數據庫的連接斷開以后,臨時表是可以被系統自動收回的,這樣子用戶下次登錄的時候會再次建立一個臨時表并且可以登錄成功!
依據第二種思路我們建立一個存儲過程:
[sql]?view plaincopyprint??
在系統中調用存儲過程來實現用戶登錄的代碼:將與數據庫的連接和執行存儲過程寫在一個函數中,然后在客戶端調用即可!
?
[plain]?view plaincopyprint??此貼說明以上方法是行不通的 http://bbs.csdn.net/topics/340244117 ? 呵呵
轉載于:https://www.cnblogs.com/xuange/p/3679718.html
總結
以上是生活随笔為你收集整理的我是SQL小菜鸟---SQL全局临时表防止用户重复登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 使用图片铺满某个区域
- 下一篇: iOS关于RunLoop和Timer