我的目标是创建一个临时表,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
答案 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
获取这些结果,然后获得最终结果。