SQL OUTER JOIN with NEWID为每行生成随机数据

时间:2010-03-15 14:36:14

标签: sql sql-server random

我想生成一些测试数据,所以对于表中的每一行,我想在另一行中插入10个随机行,见下文:

INSERT INTO CarFeatures 
  (carID, featureID)
SELECT C.ID, F.ID
  FROM dbo.Cars AS C
OUTER APPLY (
     SELECT TOP 10 ID
       FROM dbo.Features
   ORDER BY NEWID()
) AS F

只有麻烦才会为每行返回相同的值。我如何随机订购?

2 个答案:

答案 0 :(得分:1)

问题是您调用的任何函数只会被评估一次。这样的事情怎么样:

SELECT ID, NEWID() AS guid
INTO #temp
FROM dbo.Features

INSERT INTO CarFeatures (carID, featureID) 
SELECT C.ID, F.ID 
FROM dbo.Cars AS C 
OUTER APPLY ( 
SELECT TOP 10 *
FROM #temp
ORDER BY 2
) AS F 

答案 1 :(得分:1)

我通常做的是创建一个临时表,并将PK定义为GUID,其默认值为newid()。你需要一个create table语句,没有select。然后我将我的记录插入其中,然后我可以通过Id字段订购并选择前十名。