SqlServer中生成一串连续数字

本文介绍了一种在SQLServer中生成连续数字的简便方法,利用row_number()函数结合String_Split函数实现,适用于SQLServer2016及以上版本。

  在SQLServer中一串连续数字,如1,2,3,4,5,....或者

1
2
3
4
5

  没有现成方法,网上都用通用表表达式递归生成。今天想到一个还算简单的方法,记录下来:

select row_number() over (order by (select 1)) from String_Split(space(6),' ')

  生成1-7连续的数字:

   String_Split是SQLServer 2016的新函数,这个方法只对2016及后续版本有效。

转载于:https://www.cnblogs.com/wangguanguo/p/8343461.html

### 如何在 SQL Server 中批量生成数据 在 SQL Server 中实现批量生成数据的操作通常涉及循环结构、临时表或辅助工具的帮助。以下是几种常见的方法及其具体实现。 #### 方法一:使用 WHILE 循环 `WHILE` 是一种简单的控制流语句,可以在满足条件的情况下重复执行一组指令。这种方法适合于需要逐步插入大量记录的情况。 ```sql DECLARE @Counter INT; SET @Counter = 1; -- 创建测试表 CREATE TABLE TestTable ( ID INT, DataValue NVARCHAR(50) ); -- 插入数据直到达到指定数量 WHILE (@Counter <= 1000) -- 这里设置要生成的数据条数 BEGIN INSERT INTO TestTable (ID, DataValue) VALUES (@Counter, 'Data' + CAST(@Counter AS NVARCHAR)); SET @Counter += 1; -- 自增计数器 END; SELECT * FROM TestTable; -- 查看结果 DROP TABLE TestTable; -- 清理环境 ``` 此方法适用于中小规模的数据生成需求[^1]。 --- #### 方法二:利用 T-SQL 的 CTE(Common Table Expressions) CTE 提供了一种简洁的方式来定义递归逻辑并快速生成大量数据。 ```sql WITH Numbers AS ( SELECT 1 AS Number UNION ALL SELECT Number + 1 FROM Numbers WHERE Number < 1000 -- 控制最大值 ) INSERT INTO TestTable (ID, DataValue) SELECT Number, 'Generated Value ' + CAST(Number AS NVARCHAR) FROM Numbers OPTION (MAXRECURSION 0); -- 关闭默认递归限制 SELECT * FROM TestTable; -- 查看结果 DROP TABLE TestTable; -- 清理环境 ``` 该方法性能较高,尤其当需要生成连续编号序列时非常有效[^2]。 --- #### 方法三:借助外部工具 Python 或 PowerShell 自动生成脚本 如果希望更灵活地定制化大批量数据,则可以考虑结合编程语言如 Python 完成任务。例如: ```python import pyodbc # 配置数据库连接字符串 conn_str = ( r'DRIVER={ODBC Driver 17 for SQL Server};' r'SERVER=your_server_name;' r'DATABASE=test_db;' r'Trusted_Connection=yes;' ) with pyodbc.connect(conn_str) as conn: cursor = conn.cursor() # 准备插入语句模板 insert_query = "INSERT INTO TestTable (ID, DataValue) VALUES (?, ?)" # 构造批量数据列表 data_to_insert = [(i, f"Row {i}") for i in range(1, 1001)] # 执行批量化插入 cursor.executemany(insert_query, data_to_insert) conn.commit() ``` 上述代码片段展示了如何通过 `pyodbc` 库高效向目标表中写入上千甚至上万行记录[^5]。 --- #### 方法四:基于系统视图 sys.objects 动态扩展样本集 对于某些场景下可能并不关心实际业务含义而仅需填充随机样例的情形,可尝试如下技巧: ```sql -- 利用现有对象元信息作为基础素材 SELECT TOP 1000 ROW_NUMBER() OVER (ORDER BY o.object_id) AS RowNum, 'Sample Text ' + CONVERT(NVARCHAR, o.object_id % 999) AS SampleText INTO TempTestData FROM sys.all_objects o CROSS JOIN sys.columns c; SELECT * FROM TempTestData; -- 展示最终成果 DROP TABLE TempTestData; -- 删除中间产物 ``` 这里巧妙运用了交叉乘积原理扩大原始集合容量的同时保持语法简单明了[^3]。 --- ### 总结说明 以上介绍了四种不同风格的技术手段来达成相同目的——即实现在 Microsoft SQL Server 平台上的大规模数据模拟制造工作。每种方案各有优劣之处,在选用之前应综合考量项目背景以及个人偏好等因素再做决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值