2010-03-15 67 views
1

我想要生成一些测试数据,以便为表我想在另一个插入10个随机行的每一行,见下图:SQL外与NEWID JOIN生成随机数据的每一行

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 

只有麻烦是这返回每行相同的值。我如何随机订购它们?

回答

1

我最常做的是建立一个临时表,并定义了PK与NEWID()的默认值的GUID。您需要为此创建表语句,而不是选择。然后我插入我的记录,然后我可以通过Id字段进行排序并选择前十名。

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 
+0

这似乎产生相同的结果。 – markvpc 2010-03-15 14:52:32

+0

我改变了查询来分离出NEWID调用。 – Gabe 2010-03-15 17:43:51