SqlServer生成连续数字根据指定的数字操作_MsSql

来源:脚本之家  责任编辑:小易  

存储程没关系建表候创建int型列列属性标识设标识种设11始自编码标识增量设1表示每增加1足够每Insert候列存列数字自产每条记录数字条记录数字加1希望存储程Insert用给列传值自www.zgxue.com防采集请勿采集本网。

需求是使用sqlserver根据指定的数字和表生成一串连续的数字,类似于oracle中ROWNUM的功能,具体实现如下:

一、Oracle使用ROWNUM实现方式

问题涉及两面知识: 面需要数字转换间用sql间函数般用四: (1)dateadd 向指定期加段间基础返新 datetime 值 (2)datediff 返跨两指定期具体返格式差值 (3)datepart 返代表指定期指

SELECT ROWNUM number_listFROM 表名WHERE ROWNUM <= 10;

declare @i int set @i = 1 while @i < 101 begin insert into table (id) values (@i); set @i = @i + 1 end declare @i定义变量,在sql server 必须要用@才表示变量,赋值方法

二、SqlServer实现上述功能的三种方式

1. 程序语言实现(PHP, JAVA, C++, VB), 当执行删除操件, update xxx set id = id - 1 where id > deleteId2. 建立数据库"触发" (Trigger)但老实说, 保存ID的连续性在实

1.使用MASTER…spt_values方式

连续整数的数列,通常用来实现多种不同的查询任务。大多分两类:足够大物理数字表和 参考清单列表 1、《Microsoft SQL Server 2012 High-Performance T-SQL Using Win

SELECT number FROM MASTER..spt_values WHERE TYPE = 'P' AND number > 0 AND number <= 10;

好像可以通过修复数据库这个命令。很久没用sql server了。 不过实际应用中,也没必要非得让他们连续塞。

spt_values是master数据库中的一张系统表,number的数值范围是0~2047

id设置为自增字段int identity(1,1) ,字段会自己从1开始自动增加,每多一条记录自动加1了。 第一行1 第二行2 一直连续下去,删除的时候:比如说现在最大的是 4 , 你把id为4的记录

2.使用String_Split函数实现

declare @i int set @i = 1 while @i < 101 begin insert into table (id) values (@i); set @i = @i + 1 end declare @i定义变量,在sql server 必须要用@才表示变量,赋值方法有两

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

,3,7,8,9,15,16,23,24 --1,7,15,23 --假定你的字符串是按从小到大的顺序排列的,没有重复的数字 declare @s varchar(max),@t varchar(max) set @s='1,2,3,7,8,9,15,16,23,24

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

关键你的想法根本没有任何价值。第一:如果重新规划标识那么可能出现重复的ID 主要是 DBCC CHECKIDENT ('表名', RESEED, 种子值) 这个怎么用的问题!你的想法还是

(我的数据库版本是2008,此方式未验证)

alter table 表名 add 列 类型 举例说明:在jysb中加一列jysdm varchar(1) alter table jysb add jysdm varchar(1)

3.使用top+ROW_NUMBER () OVER方式实现

太奇怪了, 看SQL语句, 你那个 Id INT IDENTITY(1,1) PRIMARY KEY id 这个字段, 不但是自增长, 还是主键。 是主键,应该就不允许为 NULL 的。 会不会是 ggg表是以前创建的

SELECT TOP 10 ROW_NUMBER () OVER (ORDER BY (SELECT 1)) number_list FROM(SELECT TOP 10 * FROM 表名) t;

判断用户名和密码后,修改用户表。 update [用户表] set loginCount = loginCount+1 where userID='用户名'

第一种方式对数据库版本无要求,但是取值范围有限制0~2047;

select replace(ImageFileName,'\reportimage','\J$\reportimage') from RIS_REPORT_IMG update RIS_REPORT_IMG set ImageFileN

第二种方式对数据库版本有要求,要在2016及之上;

 1、添加jxl.jar mysql-connector-java.1.7-bin.jar包到项目的lib目录下­ 2、Excel文件目录:D://book.xls3、数据库名:javenforexcel4、表名:stu5、编写类:连接m

第三种方式对数据库版本无要求,只要表里的数据量大于要生成的数字即可;

--按你的想法做是可以的,不过 要改一点东西:declare @TABLE_NAME table([date] datetime)declare @i intset @i = 1while @i < 32begininsert into @TABLE_NAME([date])va

补充知识:数据库生成测试数据(SQL实现)

需求

项目中偶尔会有造数据进行测试的情况,根据常见的数据特征,我这里假设数据某表Table_X含4个字段,每个字段的要求如下,需要造出5000条数据。

以上需求看上去非常简单,但比较具有代表性,复杂需求也是由小需求排列组合而成。

功能准备

随机数

造数的核心功能是生成随机数,SQL Server下有RAND()系统函数可以生成0到1之间的小数,利用它可以生成固定区间 [Min,Max] 的小数:Min + (Max - Min) * RAND(),另外CHECKSUM(NEWID())也可以生成一串比较大的整数(9位或10位数居多),再配合ABS取绝对值和取模运算,就可以很好的控制所生成随机数的范围了。

区间随机数函数

为了SQL写起来方便,可事先创建一个自定义函数,用来生成区间随机数:

CREATE VIEW vwRandASSELECT RAND() AS RandValueGOCREATE FUNCTION dbo.Random_Range( @Min DECIMAL(22,5) ,@Max DECIMAL(22,5))RETURNS DECIMAL(22,5)-- return value between @Min and @MaxBEGIN DECLARE @Result DECIMAL(22,5); SELECT @Result = @Min + (@Max - @Min) * RandValue FROM vwRand; RETURN @ResultENDGO

这里先创建了一个视图,然后在函数体内引用,是因为SQL Server不支持直接在函数体中引用RAND函数,会报错Invalid use of a side-effecting operator ‘rand' within a function.。

列表选择

如果是从少量的枚举数值中选择,可以使用CHOOSE函数。

若从大量候选项中选择,可将数据导入含自增列的数据库表后,通过标量子查询进行选择。

造数SQL

SELECT TOP 5000 ABS(CHECKSUM(NEWID())) % 100 + 1 AS Col_A ,dbo.Random_Range(5000, 10000) AS Col_B ,ISNULL(CHOOSE(ABS(CHECKSUM(NEWID())) % 3 + 1, 'S', 'M', 'L', 'XL', 'XXL'), 'M') AS Col_C ,DATEADD(DAY, dbo.Random_Range(0, DATEDIFF(DAY, '20000101', '20201231')), '20000101') AS Col_DFROM sys.all_columns

说明

实际需求可能字段非常多,但基本都可以用以上写法,修改参数即可;

SQL的功能毕竟有限,基本只适合从固定列表中随机选择,以及生成随机数值性数据的场景;

若要造出更符合业务领域特性的数据,比如批量生成城市名、邮箱、人名、手机号、地址等数据,用纯SQL就会有点吃力了,下一篇将介绍如何用python的faker库生成测试数据。

以上这篇SqlServer生成连续数字根据指定的数字操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持真格学网。 您可能感兴趣的文章:SQLserver中的declare变量用法简单实现SQLServer转MYSQL的方法

这个和是不是存储过程没关系,建表的时候,你创建一个int型的列,在列属性中,将“标识”设为“是”,标识种子设为“1”,就是从1开始自动编码,“标识增量”设为“1”,就表示每次增加1,这样就足够了,每次你Insert的时候,就当这列不存在,这列的数字会自动产生,每一条记录生成的数字会是上一条记录数字加1,就和你希望的一样,存储过程里的Insert也这样,不用给这列传值,它自己会生成内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 三种sql分页查询的存储过程代码
  • sql server sa权限总结经典技术
  • sql字符串处理函数大全
  • sqlserver中用exec处理sql字符串中含有变量的小例子
  • sqlserver 字符串分拆 语句
  • sql 刷新视图
  • sqlserver 获取汉字字串的拼音声母
  • sql server数据库中的表名称、字段比较
  • 自己收集比较强大的分页存储过程 推荐
  • sql server利用bcp命令把sql语句结果生成文本文件
  • sql server存储过程产生连续不重复编号
  • sql server存储过程产生连续不重复编号
  • 等保2.0 sql server测评方法
  • SQL server 查询索引碎片--索引名为null
  • sqlserver中如何把数字转换成时间的格式。
  • sql中,如何插入一列数字从1到100
  • 请问怎么解决SQL server中删除一行自增长的字段后数字不连续...
  • SQL Server 实现数字辅助表实例代码
  • 我用sql server建的表中有一个自动生成id字段.
  • SQL数据库列自动生成编号?
  • sql中,如何插入一列数字从1到100
  • SQL SERVER2000怎么把字符串连续部分去掉,比如1,2,3,7,8,9...
  • sqlserver2005里的数据表,id删除一些数据后,如何让id从1重新开...
  • 如何向sqlserver2005的数据库表中插入一列
  • 高手求助:SQL Server数据库表自动增长字段的问题
  • SQL server怎么在更新数据的时候让字段自动加1,
  • 求sql server 2008修改字段数据的sql语句
  • 将excel数据导入SQL 如何自动生成ID编号
  • 求一段循环语句批量插入连续的日期值到SQL数据库表中的da...
  • SQL Server中的RAND函数的介绍和区间随机数值函数的实现
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页sqlserver中的declare变量用法简单实现sqlserver转mysql的方法三种sql分页查询的存储过程代码sql server sa权限总结经典技术sql字符串处理函数大全sqlserver中用exec处理sql字符串中含有变量的小例子sqlserver 字符串分拆 语句sql 刷新视图sqlserver 获取汉字字串的拼音声母sql server数据库中的表名称、字段比较自己收集比较强大的分页存储过程 推荐sql server利用bcp命令把sql语句结果生成文本文件sql server 2012 安装图解教程(附sql server数据库入门学习总结microsoft sql server 2012 数据win7系统安装sqlserver2000的详细sql重复记录查询的几种方法sqlserver中distinct的用法(不重sql server错误代码大全及解释(sql-order by 多字段排序(升序、sql将一个表中的数据插入到另一个用sql语句添加删除修改字段、一些分发服务器 系统抛出18483错误,未能连接sql server利用bcp命令把sql语句结果生成sql server 数据库备份代码实例做购物车系统时利用到得几个sqlserver 存sql server中的连接查询详解sql server 高性能写入的一些经验总结数据库存储过程分页显示mybatis实践之动态sql及关联查询h2 数据库导入csv文件实现原理简析修复断电等损坏的sql 数据库
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved