如何生成其他表中不存在的随机数?

时间:2015-11-13 23:38:21

标签: sql sql-server

我的目标是创建一个临时表,TBL_2.RANDOM2中不存在TBL_1.RANDOM1。如果RANDOM2没有数据,但是一旦插入了值,我的代码就会填充NULLS。

我已经搜索了一段时间,发现了一段代码并认为它​​有效,直到有些数据被添加到我不想复制的列中。

SELECT DISTINCT COL1, MAX(COL2) AS COL2, MAX(COL3) AS COL3, (
    SELECT DISTINCT 'AUTOCT' 
                    + CAST(ABS(CHECKSUM(NEWID()) % 899999) + 100000 AS VARCHAR(15)) AS RANDOM1
    WHERE RANDOM1 NOT IN (
            SELECT DISTINCT RANDOM2
            FROM TBL_2
            WHERE RANDOM2 LIKE 'AUTOCT%'
            )
    ) AS RANDOM1, COUNT(COL5) AS COL5, SUM(COL6) AS COL6
INTO ##TEMP1
FROM TBL_1

2 个答案:

答案 0 :(得分:1)

如果我理解你,那么尝试使用RAND()函数获取随机数(如果使用SQL Server 2005或更高版本)。例如:

DECLARE @Random INT
DECLARE @Upper INT = 1
DECLARE @Lower INT = 999
DECLARE @RandomField  VARCHAR(10)

SET @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)
SET @RandomField  = 'AUTOCT' + CAST(@Random as varchar(5))

IF NOT EXISTS (select 1 from TBL_2 where RANDOM2 = @RandomField)
BEGIN
  INSERT INTO TBL_1 (RANDOM1) VALUES (@RandomField)
END

答案 1 :(得分:0)

那里有2个“SELECT DISTINCT”语句。一个好的经验法则是,如果你加入桌子并写出区别,你可能会找到更好的方法。

我会做类似的事情:

SELECT random1 
FROM table1
EXCEPT 
SELECT random2
FROM table2

获取这些结果,然后获得最终结果。