SQL Server创建一个临时表,该表的每一行都具有随机数

时间:2018-12-08 16:50:48

标签: sql sql-server

我有点两难。我的任务是创建一个本地临时表,该表将包含教师的名字,姓氏,校园和新的ID号。 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 character string using MySQL

重新发布此内容是因为很多事情都不正确,例如标签和说明。

2 个答案:

答案 0 :(得分:3)

生成唯一编号确实很痛苦。我建议您生成随机数,但要按顺序进行:

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

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

答案 1 :(得分:0)

对于任何想知道的人,我最终都解决了自己的问题!以为我会在这里分享。

CREATE TABLE #Rand4
(
    LocalID int IDENTITY,
    IDnumber char(5) DEFAULT
                LEFT(CAST(CAST(CEILING(RAND() * 100000000) AS bigint) AS varchar), 5)
);

INSERT #Rand4 VALUES (DEFAULT);
INSERT #Rand4 VALUES (DEFAULT);
INSERT #Rand4 VALUES (DEFAULT);
INSERT #Rand4 VALUES (DEFAULT);
INSERT #Rand4 VALUES (DEFAULT);

SELECT FirstName, LastName, Campus, IDnumber
FROM Faculty JOIN #Rand4 
    ON Faculty.Faculty_ID = #Rand4.LocalID;

最初查询的问题是我没有考虑必须围绕随机数函数创建本地表。希望这会有所帮助!

感谢您对@clay和@Sami的帮助!