将特定随机值插入临时表

时间:2014-06-19 23:57:03

标签: sql sql-server random sql-insert

我需要为数据库中的一个新表创建一些虚拟数据。我将从现有表中获取值,并且还将创建新列,其中值是从值列表中随机选择的。

我的表结构:

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

有人可以指导我如何在表格中插入随机但具体的值吗?

2 个答案:

答案 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;