遵循此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
。有任何线索吗?
答案 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