sqlserver 不重復(fù)的隨機(jī)數(shù)
MSSQL有一個(gè)函數(shù)CHAR()是將int(0-255) ASCII代碼轉(zhuǎn)換為字符。那我們可以使用下面MS SQL語(yǔ)句,可以隨機(jī)生成小寫(xiě)、大寫(xiě)字母,特殊字符和數(shù)字。
大寫(xiě)字母:
CHAR(ROUND(RAND() * 25 + 65,0))
小寫(xiě)字母:
CHAR(ROUND(RAND() * 25 + 97,0))
特殊字符:
CHAR(ROUND(RAND() * 13 + 33,0))
數(shù)字:
CHAR(ROUND(RAND() * 9 + 48,0))
剛才有位網(wǎng)友在SKYPE問(wèn)及如上問(wèn)題。
好的,Insus.NET也正想寫(xiě)一個(gè)存儲(chǔ)過(guò)程來(lái)應(yīng)用上面這篇的SQL語(yǔ)句,你可以參考如下的存儲(chǔ)過(guò)程,如果還問(wèn)題請(qǐng)繼續(xù)討論。
usp_RandomNumber
CREATE PROCEDURE [dbo].[usp_RandomNumber]
(
@Len INT = 1, --隨機(jī)數(shù)位數(shù)
@Rows INT = 1 --隨機(jī)筆數(shù)
)
AS
BEGIN
DECLARE @T AS TABLE([Random Number] VARCHAR(MAX))
DECLARE @L INT = 1, @R INT = 1
WHILE @R <= @Rows
BEGIN
DECLARE @RN varchar(MAX) = ''
WHILE @L <= @Len --隨機(jī)產(chǎn)生每個(gè)隨數(shù)的位數(shù)
BEGIN
SET @RN = @RN + CHAR(ROUND(RAND() * 9 + 48,0))
SET @L = @L + 1
END
--如果產(chǎn)生相同的隨機(jī)數(shù),將不會(huì)存儲(chǔ)
IF NOT EXISTS(SELECT [Random Number] FROM @T WHERE [Random Number] = @RN)
BEGIN
INSERT INTO @T SELECT @RN --INSERT INTO @T ([Random Number])VALUES (@RN)
SET @R = @R + 1 --記錄總共產(chǎn)生了幾筆隨機(jī)數(shù)
SET @L = 1 -- 每產(chǎn)生完一個(gè)隨機(jī)數(shù)之后,將隨機(jī)數(shù)的位數(shù)初始化為1
END
END
SELECT [Random Number] FROM @T
END
當(dāng)你把上面的存儲(chǔ)過(guò)程附加入數(shù)據(jù)庫(kù)之后,可以執(zhí)行這個(gè)存儲(chǔ)過(guò)程:
EXECUTE [dbo].[usp_RandomNumber] 8,10
得到的結(jié)果(由于是隨機(jī)產(chǎn)生,每次execute獲得結(jié)果會(huì)不一樣)
相關(guān)文章
在SQL觸發(fā)器或存儲(chǔ)過(guò)程中獲取在程序登錄的用戶(hù)
每個(gè)用戶(hù)可以登錄系統(tǒng),在程序中操作數(shù)據(jù)(添加,更新和刪除)需要實(shí)現(xiàn)記錄操作跟蹤。是誰(shuí)添加,更新和刪除的,這些信息將會(huì)插入至AuditLog表中2012-01-01什么是數(shù)據(jù)庫(kù) SQL Execution Plan(簡(jiǎn)單介紹)
SQL Execution PlanSQL 執(zhí)行計(jì)劃是數(shù)據(jù)庫(kù)管理系統(tǒng)在執(zhí)行SQL語(yǔ)句時(shí),對(duì)如何高效檢索數(shù)據(jù)進(jìn)行的一系列優(yōu)化步驟的描述,這篇文章主要介紹了什么是數(shù)據(jù)庫(kù) SQL Execution Plan,需要的朋友可以參考下2024-03-03SQL SERVER 2000 9003錯(cuò)誤的解決方法(只適用于SQL2000)
"無(wú)法打開(kāi)新數(shù)據(jù)庫(kù) 'POS'。CREATE DATABASE 中止。 (Microsoft SQL Server,錯(cuò)誤: 9003)"看是9003錯(cuò)誤,怎么解決呢,下面小編給大家分享SQL SERVER 2000 9003錯(cuò)誤的解決方法(只適用于SQL2000),一起看看吧2016-09-09EXEC(EXECUTE)函數(shù)訪(fǎng)問(wèn)INSERTED或DELETED的內(nèi)部臨時(shí)觸發(fā)表
近段時(shí)間,MS SQL方面,一直需要開(kāi)發(fā)動(dòng)態(tài)方面的存儲(chǔ)過(guò)程或是觸發(fā)器以及表函數(shù)。因?yàn)槌绦蛟O(shè)計(jì)一開(kāi)始就是讓用戶(hù)動(dòng)態(tài)添或是刪除一個(gè)表的字段,然而這個(gè)表的相關(guān)存儲(chǔ)過(guò)程或是觸發(fā)器以及為報(bào)表準(zhǔn)備的表函數(shù)也會(huì)隨之這個(gè)表的字段變化而變化2012-01-01實(shí)現(xiàn)SQL Server 原生數(shù)據(jù)從XML生成JSON數(shù)據(jù)的實(shí)例代碼
這篇文章主要介紹了實(shí)現(xiàn)SQL Server 原生數(shù)據(jù)從XML生成JSON數(shù)據(jù)的實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03Superset實(shí)現(xiàn)動(dòng)態(tài)SQL查詢(xún)功能
這篇文章給大家介紹使用自定義參數(shù)方式實(shí)現(xiàn) superset 實(shí)現(xiàn)SQL動(dòng)態(tài)查詢(xún)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-08-08Oracle、MySQL和SqlServe三種數(shù)據(jù)庫(kù)分頁(yè)查詢(xún)語(yǔ)句的區(qū)別介紹
這篇文章主要介紹了Oracle、MySQL和SqlServe三種數(shù)據(jù)庫(kù)分頁(yè)查詢(xún)語(yǔ)句的區(qū)別介紹 的相關(guān)資料,需要的朋友可以參考下2016-05-05SQL Server的FileStream和FileTable深入剖析
互聯(lián)網(wǎng)時(shí)代數(shù)據(jù)是爆炸式增長(zhǎng),我們常常需要把結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)在一起。本文將介紹幾種解決方案2012-11-11