首页 > 解决方案 > SQL Server 为每一行创建一个具有随机数的临时表

问题描述

我有点进退两难。我的任务是创建一个本地临时表,其中包含教职员工的名字、姓氏、校园和新的身份证号码。ID 号将是一个随机生成的 5 位数字。(我正在使用 Microsoft SQL Server Management Studio)

我的问题是我是随机数生成和本地临时表的新手。我相信我的大部分代码都是正确的,期望我需要制作的“随机 ID 号”。我用谷歌搜索了我的问题,唯一的问题是似乎有很多方法可以创建“随机”数字,但我不明白它背后的方法。

我在下面包含了我的代码和数据库。

我的代码:

SELECT 
    FirstName, LastName, Campus, 
    LEFT(CAST(CAST(CEILING(RAND() *100000000) AS bigint) AS varchar), 5) AS IDnumber
INTO 
    #LocalTemp1
FROM 
    Faculty;

SELECT * FROM #LocalTemp1

数据库:

CREATE TABLE Faculty
(
     Faculty_ID INT PRIMARY KEY IDENTITY,
     LastName VARCHAR(20) NOT NULL,
     FirstName VARCHAR(20) NOT NULL,
     Department VARCHAR(10) SPARSE NULL,
     Campus VARCHAR (10) SPARSE NULL
);

INSERT INTO Faculty 
VALUES ('Brown', 'Joe', 'Business', 'Kent'),
       ('Smith', 'John', 'Economics', 'Kent'),
       ('Jones', 'Sally', 'English', 'South'),
       ('Black', 'Bill', 'Economics', 'Kent'),
       ('Green', 'Gene', 'Business', 'South');

CREATE TABLE Course
(
     Course_ID INT PRIMARY KEY IDENTITY,
     Ref_Number CHAR (5) CHECK (Ref_Number LIKE '[0-9][0-9][0-9][0-9][0-9]'),
     Faculty_ID INT NOT NULL REFERENCES Faculty (Faculty_ID),
     Term CHAR (1) CHECK (Term LIKE '[A-C]'),
     Enrollment INT NULL DEFAULT 0 CHECK (Enrollment < 40)
)

INSERT INTO Course 
VALUES ('12345', 3, 'A', 24), ('54321', 3, 'B', 18),
       ('13524', 1, 'B', 7), ('24653', 1, 'C', 29),
       ('98765', 5, 'A', 35), ('14862', 2, 'B', 14),
       ('96032', 1, 'C', 8), ('81256', 5, 'A', 5),
       ('64321', 2, 'C', 23), ('90908', 3, 'A', 38); 

我正在查看的一个来源,仍然需要更好的理解:Generating a random & unique 8 characters string using MySQL

重新发布此内容是因为我的最后一个内容有很多不正确,例如标签和解释。

标签: sqlsql-server

解决方案


生成一个唯一的数字真的很痛苦。我建议您生成随机数,但要按顺序:

SELECT FirstName, LastName, Campus,
       ROW_NUMBER() OVER (ORDER BY NEWID()) as IDnumber
INTO #LocalTemp1
FROM Faculty;

例如,如果您想要一个不以 0 开头的 5 位数字,则可以在该数字上加 10,000。


推荐阅读