Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用NEWID进行SQL外部联接,为每行生成随机数据_Sql_Sql Server_Random - Fatal编程技术网

使用NEWID进行SQL外部联接,为每行生成随机数据

使用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 唯一的问题是,这会为每一行返回相同的值。如何随机排序?问题

我想生成一些测试数据,因此对于表中的每一行,我想在另一行中插入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

唯一的问题是,这会为每一行返回相同的值。如何随机排序?

问题是,您调用的任何函数都只计算一次。像这样的怎么样:

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调用。