此篇博文是這篇密碼需要帶特殊字元
的公升級篇,前一篇的儲存過程產生的密碼隨機數,有可能乙個隨機數就包含有過多的特殊字元,而且第乙個字元就有可能是特殊字元。
因此產生此篇,隨機密碼首字元不能為數字與特殊字元但必須包含且只有乙個特殊字元。
另外還修正了特殊字符集長度問題,使用特殊字符集長度減一(len(@specialcharacter) -
1) 這樣當你增減特殊字符集時,再不需多次地方一同修改。
修正前:
substring(@specialcharacter, convert(tinyint,round(rand() *6+
1,0)),1)
修正後:
substring(@specialcharacter, convert(tinyint,round(rand() * (len(@specialcharacter) -
1) +
1,0)),1)
完整的儲存過程,僅供參考。
usp_randompassword
alter
procedure
[dbo
].[usp_randompassword](
@length
int=8)
asbegin
declare
@randompassword
nvarchar(max) = n''
declare
@specialcharacter
nvarchar(255) = n'
@#$%&*?'--
特殊字符集
declare
@hasspccht
bit=0--
判斷產生的隨機數是否有包含隨機數
declare
@lint=1
declare
@rtinyint,@r1
tinyint,@r2
tinyint
while
@l<=
@length
--迴圈密碼長度,每一位字元將隨機產生
begin
if@l=1
--隨機數第一位只為字母,大寫或小寫
begin
set@r
=round(rand() *
1, 0)
set@randompassword
=@randompassword
+case
@rwhen
0then
char(round(rand() *25+
97,0))
when
1then
char(round(rand() *25+
65,0))
endend
else
begin
if@l
=@length
and@hasspccht=0
--當最後一位時,如果沒有產生過特殊字元,那為隨機數產生乙個。
begin
set@randompassword
=@randompassword
+substring(@specialcharacter, convert(tinyint,round(rand() * (len(@specialcharacter) -
1) +
1,0)),1)
set@hasspccht=1
endelse
begin
set@r1
=round(rand() *
3, 0)
if@r1=0
set@randompassword
=@randompassword
+char(round(rand() *25+
97,0))
if@r1=1
set@randompassword
=@randompassword
+char(round(rand() *25+
65,0))
if@r1=2
set@randompassword
=@randompassword
+char(round(rand() *9+
48,0))
if@r1=3
--隨機產生特殊字元
begin
if@hasspccht=0
--如果沒有產生過,那為隨機數產生乙個。
begin
set@randompassword
=@randompassword
+substring(@specialcharacter, convert(tinyint,round(rand() * (len(@specialcharacter) -
1) +
1,0)),1)
set@hasspccht=1
endelse
--如果已經產生過特殊字元,只迴圈產生字母,或數字
begin
set@r2
=round(rand() *
2, 0)
set@randompassword
=@randompassword
+case
@r2when
0then
char(round(rand() *25+
97,0))
when
1then
char(round(rand() *25+
65,0))
when
2then
char(round(rand() *9+
48,0))
endend
endend
endset@l=
@l+1--
隨機產生一位,隨機數字數加一位。
endselect
@randompassword
end
在進行表資料查詢時需要帶上使用者名稱
問題描述 在進行某個表進行資料查詢時需要帶上使用者名稱,例如 select from mydb.emp 現在就是不想帶使用者名稱進行查詢select from emp 解決辦法 1 建立檢視 create view table name as select from mydb.table name ...
正則中需要轉義的特殊字元
正規表示式中有一些特殊的字元需要轉義,收集整理如下 特殊字元 說明 匹配輸入字串的結尾位置。如果設定了 regexp 物件的 multiline 屬性,則 也匹配 n 或 r 要匹配 字元本身,請使用 標記乙個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 和 匹配前面...
正則中需要轉義的特殊字元小結
正規表示式中的特殊字元,就是一些有特殊含義的字元,如 txt 中的 簡單的說就是表示任何字串的意思 如果要查詢檔案名中有 的檔案,則需要對 進行轉義,即在其前加乙個 ls txt。正規表示式有以下特殊字元。需要轉義 特別字元 說明 匹配輸入字串的結尾位置。如果設定了 regexp 物件的 multi...