我需要为数据库中的一个新表创建一些虚拟数据。我将从现有表中获取值,并且还将创建新列,其中值是从值列表中随机选择的。
我的表结构:
ID -- increment by 1
PersonsID -- will get this values from a different table
Status --Need to insert random values of example "Waived" or "Enrolled"
StatusDate -- need to insert random DateTime within past few months
School --Need to insert random values of example "A", "B", "C", "D"
ChangedBy --Need to insert random username from a different table
有人可以指导我如何在表格中插入随机但具体的值吗?
答案 0 :(得分:2)
对于不同类型的随机值,您将需要不同的技术
例如,要在过去90天内获得随机日期时间。
select dateadd(second, -90*86400*rand(), getdate()) -- 86400 seconds in a day
选择“A”,“B”,“C”或“D”
select substring('ABCD', convert(int,rand()*4+1), 1)
从表中选择任意值(StateCode)(USStates)
select top 1 StateCode from USStates order by newid()
然后,您将这些技术结合起来,以插入您需要的数据
答案 1 :(得分:0)
如果要获取随机值,SQL中的基本表达式为rand(checksum(newid()))
。以下是您可以使用此方法的方法。
对于id
,我假设你有一个带有标识列的新表。以下是一个示例查询:
insert into newtable(PersonsID, status, StatusDate, School, ChangedBy)
select PersonsId,
(case when rand(checksum(newid())) < 0.5 then 'Waived' else 'Enrolled' end),
cast(getdate() - 90 * rand(checksum(newid()))),
(select top 1 col
from (select 'A' as col union all select 'B' union all select 'C' union all select 'D'
) t
order by rand(checksum(newid()))
) ,
(select top 1 username
from othertable ot
order by rand(checksum(newid()))
)
from Persons;