数SQLServer中实现随机数生成的方法

介绍

在进行SQL Server数据库的开发时,有时候需要随机生成一些数据。例如模拟用户信息、测试数据等。在数据库中实现随机数生成,是很常见的需求之一。

常用的随机数生成方法有两种:

在应用程序中进行生成;

在SQL Server中使用内置函数进行生成。

本文将讨论第二种方法:在SQL Server中实现随机数生成。

使用RAND()函数生成随机数

语法

RAND ( [ seed ] )

参数

seed:是一个可选的种子值。如果指定了种子值,它将用来生成随机数;否则,将使用一个默认种子值。

实例

RAND()函数可以用来生成0到1之间的随机数。

SELECT RAND()

上面代码将会得到如下结果:

+------------------+

| (No column name) |

+------------------+

| 0.14716360290809 |

+------------------+

RAND()函数可以用来生成指定范围内的随机数。

SELECT FLOOR(RAND()*(10-1+1)) + 1

上面代码将会得到1到10之间的随机数。

使用CROSS JOIN生成随机数

实例

CROSS JOIN可以用来生成一定数量的随机数。

SELECT ABS(CHECKSUM(NewId())) % 10 as RandomNumber

FROM sys.objects

CROSS JOIN sys.objects

上面代码将会得到0到9之间的随机数。

解释

sys.objects是系统表,它至少包含了一个纪录。在表sys.objects的每次交叉连接下,NewId函数总是返回一个不同的GUID,GUID是一个全球唯一的标识符,唯一性是其核心之一。CHECKSUM函数计算所有传入的表达式的32位checksum值。最终结果是取checksum值的绝对值然后取模10的余数。这个结果总是在0到9之间。

该方法相对于RAND()函数,能够更好的生成随机数。

使用TABLESAMPLE子句生成随机数

语法

TABLESAMPLE [SYSTEM | BERNOULLI] (sample_number [PERCENT | ROWS])

参数

SYSTEM | BERNOULLI:是一个可选参数。如果省略或指定 SYSTEM,那么将使用系统锁定的行采样方法。如果指定 BERNOULLI,那么将使用伯努利随机样本方法。

sample_number:是要返回的行数。

PERCENT | ROWS:是一个可选的参数,用来指定采样行数的方式。如果省略,PERCENT将被视为默认值。

实例

TABLESAMPLE子句可以用来生成指定数量的随机记录。

SELECT *

FROM table_name TABLESAMPLE BERNOULLI (10 PERCENT)

对于表table_name中的所有行,上面代码会选择10%的随机记录。如果省略 PERCENT 参数,则默认使用 PERCENT。

注意

TABLESAMPLE子句只能在表上使用,不能在视图或表表达式上使用。

总结

在本文中,我们介绍了使用SQL Server中的内置函数RAND()函数、CROSS JOIN和TABLESAMPLE子句实现生成随机数的三种方法。

如果仅需要随机生成一条记录,我们可以使用RAND()函数。

如果需要随机生成指定数量的记录,我们可以使用CROSS JOIN。

如果需要对表随机抽样,我们可以使用TABLESAMPLE子句。

有了这些技巧和函数,我们可以轻松地生成随机数据,方便日常测试、模拟、演示和开发。

数据库标签