我想生成一些测试数据,所以对于表中的每一行,我想在另一行中插入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
只有麻烦才会为每行返回相同的值。我如何随机订购?
答案 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字段订购并选择前十名。