介绍
在进行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子句。
有了这些技巧和函数,我们可以轻松地生成随机数据,方便日常测试、模拟、演示和开发。