2010-03-15 36 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