使用NEWID进行SQL外部联接,为每行生成随机数据
我想生成一些测试数据,因此对于表中的每一行,我想在另一行中插入10个随机行,请参见以下内容:使用NEWID进行SQL外部联接,为每行生成随机数据,sql,sql-server,random,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 唯一的问题是,这会为每一行返回相同的值。如何随机排序?问题
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
唯一的问题是,这会为每一行返回相同的值。如何随机排序?问题是,您调用的任何函数都只计算一次。像这样的怎么样:
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
我通常做的是创建一个临时表,并将PK定义为默认值为newid()的GUID。您需要一个CREATETABLE语句来执行此操作,无SELECTINTO。然后我将我的记录插入其中,然后我可以按Id字段排序并选择前十名。这似乎产生了相同的结果。我更改了查询以分离NEWID调用。