Dom*_*Bat 6 sql sql-server random numbers c#-4.0
我们的Customer表有一个ID标识列.这将发给客户,所以当他们打电话时他们可以提供他们的身份证.
现在显而易见的是,我们的竞争对手可以轻松地在我们的网站上注册两次,比如相隔一个月,并确切地知道有多少人注册了.
因此,有一个很好的简单方法来创建一个"客户ID"(在SQL或c#中)我们可以给客户:(a)6位数长(b)是唯一的(c)不是顺序的(
提前致谢
也许这很疯狂,但这是我预先生成客户编号的方法。
这将很快生成您想要的许多唯一密钥。
显然,您可以将它们保存到真实的表中。
这是以下的SQLFiddle : http://www.sqlfiddle.com/#!3 /d41d8/3884
DECLARE @tbl TABLE
(
ID INT IDENTITY(1,1),
CustNo INT UNIQUE
)
DECLARE @Upper INT
DECLARE @Lower INT
DECLARE @NumberRequired INT
SET @Lower = 100000 ---- The lowest random number allowed
SET @Upper = 999999 ---- The highest random number allowed
SET @NumberRequired = 1000 -- How many IDs do we want?
WHILE (SELECT COUNT(*) FROM @tbl) < @NumberRequired
BEGIN
BEGIN TRY
INSERT INTO @tbl SELECT (ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0))
END TRY
BEGIN CATCH
-- If it goes wrong go round the loop again
END CATCH
END
SELECT *
FROM @tbl
Run Code Online (Sandbox Code Playgroud)
编辑:实际上这可能更快。它在我的开发机器上大约 30 秒内生成所有 900000 个可能的密钥,这对于一次性工作来说是可以的。
DECLARE @tbl TABLE
(
ID INT
)
DECLARE @Upper INT
DECLARE @Lower INT
DECLARE @i INT;
SET @Lower = 100000 ---- The lowest random number allowed
SET @Upper = 999999 ---- The highest random number allowed
SET @i = @Lower
WHILE @i <= @Upper
BEGIN
INSERT INTO @tbl SELECT @i
SET @i = @i + 1
END
SELECT ID
FROM @tbl ORDER BY NEWID()
Run Code Online (Sandbox Code Playgroud)