创建虚拟数据时使用Rand()的最佳方法

时间:2013-09-17 22:57:57

标签: sql sql-server

我正在为一些表格编制一些虚拟数据。对于整数列,这很容易。我有几个列只是枚举,我正在试图弄清楚如何随机化它们。我试图复制这种逻辑,但对于SQL

CASE RAND()
WHEN BETWEEN (0,.3) THEN 'Apple'
WHEN BETWEEN (.31, .6) THEN 'Orange'
WHEN BETWEEN (.61, 1) THEN 'Banana'

这是一个插入语句,所以现在对于我的其他一些列

INSERT INTO Table Values ('1', 'a', CASE Rand() WHEN > .3 THEN 'firstEnum' ELSE 'secondEnum')

我想要更多,只需要两个枚举。

我将使用实际执行此操作的正确方法是什么?我认为有更好的方法,但我的SQL经验非常有限。

3 个答案:

答案 0 :(得分:1)

我的建议是购买http://www.red-gate.com/products/sql-development/sql-data-generator/。我在那里使用工具带,他们以合理的价格制作出色的工具。如果你买不起,我会建议你查看Codeplex或GitHub。查看此问题以获取更多信息Looking for a SQL test set generator, ideally open source

答案 1 :(得分:0)

您可以执行类似的操作,我在SQL Server 2012中对此进行了测试,但如果它不能满足您的需求,我很乐意发布其他解决方案。

DECLARE @ListofIDs TABLE(IDs VARCHAR(100));
INSERT INTO @ListofIDs
VALUES('Jeff'),('John'),('Mike'),('Chris'),('Tom'),('Fred');
SELECT top (1) IDs FROM @ListofIDs order by NEWID();
GO

答案 2 :(得分:0)

您还可以通过

生成随机文本
BEGIN
-- get a random varchar ascii char 32 to 128
DECLARE @RandomText VARCHAR(160)
DECLARE @length INT
SELECT @RandomText = ''
SET @length = CAST(RAND() * 160 as INT)
WHILE @length <> 0
    BEGIN
    SELECT @RandomText = @RandomText + CHAR(CAST(RAND() * 96 + 32 as INT))
    SET @length = @length - 1
END
print(@RandomText)
END