如何从一个表中选择一个随机ID并将其用于将随机数据填充到另一个表中?

时间:2018-09-04 15:24:56

标签: sql-server

遵循此guideline,我试图插入随机数据为我的应用程序进行压力测试。

我在某些列上有一些外键,我也想为它们插入一些随机数据。

假设表Clinics有5条记录,其ID为“ 3,7,90,98,102”;对于Activities上的每个插入,我想选择这5个ID中的一个。尝试过:

Declare @clinicId int

Declare @counter int
Set @counter = 11

While @counter < 12
Begin 
    @clinicId = SELECT TOP 1 * FROM Clinics ORDER BY NEWID()

   Insert Into Activities values (@clinicId, 100, 10, 90, 2, 65, 1)

   Set @counter = @counter + 1
End

但是它显示Syntax error in proximity of @clinicId。有任何线索吗?

2 个答案:

答案 0 :(得分:2)

您需要top (1)才能进行分配:

SELECT TOP (1) @clinicId = ID 
FROM Clinics 
ORDER BY NEWID()

注意:

  • 您只能将单列值分配给标量变量。

如果要分配所有数据,请使用表变量

答案 1 :(得分:1)

您的代码可以通过以下方式固定:

set @clinicId = (SELECT TOP 1 clinic_id from ...)

或者您可以通过基于集合的解决方案(应该替换给定的所有脚本)摆脱循环和变量:

declare @cnt int = 12

Insert Into dbo.Activities (...)
SELECT
  c.clinicID, 100, 10, 90, 2, 65, 1
FROM 
(
   SELECT TOP (@cnt) 1 dummy
   from master.dbo.spt_values
) v
CROSS APPLY (
  SELECT TOP (1) c.clinicID
  FROM dbo.Clinics c
  ORDER BY NEWID()
) c