开放式装备平台OpenRig:铝型材DIY桌面理线与散热实战指南
2026/10/9 5:18:24
在分析系统中,因为数据量太大,无法直观看出统计结果的正确性。在使用新技术时,需要使用简单的数据,来验证语句的结果。本文介绍SQL Server生成模拟数据的方法。
SELECT*FROM(VALUES(1,'张三','销售部',8000.00),(2,'李四','技术部',9500.50),(3,'王五','财务部',7800.80))ASEmployees(Id,Name,Department,Salary);| Id | Name | Department | Salary |
|---|---|---|---|
| 1 | 张三 | 销售部 | 8000.00 |
| 2 | 李四 | 技术部 | 9500.50 |
| 3 | 王五 | 财务部 | 7800.80 |
使用说明
利用 spt_values 生成时间序列:master.dbo.spt_values 中 type = ‘P’ 的记录包含连续的数字(0-2047),可以用它来生成 N 个月份的序列(对应 2024-2025 年)。
示例
SELECTnumberASId,DATEADD(MONTH,number,'2024-01-01')AS[Date]FROMmaster.dbo.spt_valuesWHEREtype='P'ANDnumberBETWEEN0AND23| Id | Date |
|---|---|
| 0 | 2024-01-01 00:00:00.000 |
| 1 | 2024-02-01 00:00:00.000 |
| 2 | 2024-03-01 00:00:00.000 |
| … | … |
| 23 | 2025-12-01 00:00:00.000 |
ABS(CHECKSUM(NEWID())):核心作用是生成一个随机的 32 位整数(非负数),常用来快速生成无规律的随机数,是 SQL Server 中生成随机整数的经典写法。NEWID():创建一个全球唯一的UNIQUEIDENTIFIER类型值(GUID/UUID),格式如E2B5D86C-7B9F-4A8D-9876-1234567890AB。每次执行都会生成完全不同的值。CHECKSUM():计算哈希值,对输入的任意值计算一个 32 位的整数校验和(哈希值),返回值是INT类型,范围为-2147483648到2147483647(可能是正数或负数)。ABS():取绝对值SELECTABS(CHECKSUM(NEWID())),ABS(CHECKSUM(NEWID())),ABS(CHECKSUM(NEWID()))| 820134663 | 1590581027 | 1359169063 |
|---|
SELECTDATEADD(MONTH,sv.number,'2025-01-01')ASDate,p.ProductId,ABS(CHECKSUM(NEWID()))%1000+100ASQuantity,(ABS(CHECKSUM(NEWID()))%1000+100)*10ASTotalFROMmaster.dbo.spt_values svCROSSJOIN(VALUES(101),(102),(103))ASp(ProductId)WHEREsv.type='P'ANDsv.numberBETWEEN0AND11ORDERBYDate,ProductId;| Date | ProductId | Quantity | Total |
|---|---|---|---|
| 2025-01-01 00:00:00.000 | 101 | 1011 | 4210 |
| 2025-01-01 00:00:00.000 | 102 | 409 | 8650 |
| 2025-01-01 00:00:00.000 | 103 | 684 | 9420 |
| 2025-02-01 00:00:00.000 | 101 | 271 | 4340 |
| 2025-02-01 00:00:00.000 | 102 | 411 | 6420 |
| 2025-02-01 00:00:00.000 | 103 | 296 | 7140 |
| … | … | … | … |
| 2025-12-01 00:00:00.000 | 101 | 642 | 4680 |
| 2025-12-01 00:00:00.000 | 102 | 1003 | 3790 |
| 2025-12-01 00:00:00.000 | 103 | 159 | 6500 |