快速对表的某字段赋递增的数值
时间:2022-05-07
本文章向大家介绍快速对表的某字段赋递增的数值,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
假如有这张一张表,当时创建时没有用来存放递增的数值的int型字段。在使用的过程中,有这样的需求。
USE AdventureWorks2008R2;GOIF OBJECT_ID(N'T33','U') IS NOT NULLBEGIN
DROP TABLE T33;END;GOCREATE TABLE T33 (
col_1 NVARCHAR(20),
col_2 NVARCHAR(40)
);GO
code-1:建表
插入测试数据
INSERT INTO T33 (col_1,col_2)SELECT TOP (1000) LEFT(a.[name],20),NEWID() FROM sys.objects AS a CROSS JOIN sys.objects AS b;GO
code-2:插入数据
这时,如果需要在这张表上增加一列int型的字段。除了直接在SSMS的表设计器(添加字段id,并设置为自增列)上做之外,还可以使用脚本来实现。用脚本来实现有一个好处是:如果表已有的数据已经很多时,有很大的优势。
ALTER TABLE T33
ADD [id] INT DEFAULT(1) NOT NULL;GO
code-3:添加字段——id
有几种办法可以给新建的字段赋予递增的数值,可以使用循环,游标等,但使用CTE效率最高。这里使用的是row_number()窗口函数,其中order by子句不能缺少,又无需对表数据进行排序,所以加了select 1子句,优化器会知道这跟排序无关。
WITH CTE1 AS (SELECT id,ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS row_no FROM T33
)UPDATE CTE1 SET id = row_no;GO
code-4:赋值
如果还要添加主键的话:
ALTER TABLE T33 ADD CONSTRAINT pk_T33_id PRIMARY KEY CLUSTERED (id);GO
code-5:添加主键
疑问:在添加id字段之前,是否可以使用脚本添加自增列?如何添加?
----------2016-01-08 18:00 更新--------
经过@goto13 的提醒,直接在添加id字段时,指定为自增列就已经可以实现最后的效果了。谢谢!不过使用CTE这种赋值也算是另一种思路吧。
ALTER TABLE T33 ADD [id] INT NOT NULL IDENTITY(1,1);GOALTER TABLE T33 ADD CONSTRAINT PK_T33_ID PRIMARY KEY CLUSTERED (id);GO
code-6:添加自增列和主键约束
- 如果在BackgroundWorker运行过程中关闭窗体…
- 从数据到代码——基于T4的代码生成方式
- 解决T4模板的程序集引用的五种方案
- 编写T4模板进行代码生成无法避免的两个话题:"Assembly Locking"&"Debug"
- 从yield关键字看IEnumerable和Collection的区别
- 让“链式调用(方法链)”更加自然一点
- ASP.NET应用下基于SessionState的“状态编程框架”解决方案
- 为自定义配置的编辑提供”智能感知”的支持
- 在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?
- 在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute?
- [ASP.NET MVC]如何定制Numeric属性/字段验证消息
- 为.NET Core项目定义Item Template
- 晚绑定场景下对象属性赋值和取值可以不需要PropertyInfo
- 一个关于反序列化的小问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 调素数
- DFS(小白式超详细讲解以及代码讲解)
- 判断一个序列是否有序(升序或者降序)
- 有关dp问题的机器人走地图
- 有关结构体内重载操作的最详细的讲解~~
- 洛谷 P1002 DP解法
- AtCoder Beginner Contest 163 A~~D 详细代码讲解
- HUD 4841 (vector的用法)
- c++ 优先队列(priority_queue)的详细讲解用法
- HDU 1022(关于栈的详细解法)
- count_if函数的用法
- Codeforces Round #633 (Div. 2) A ~~C
- AtCoder Beginner Contest 162 A~~D
- P1036 选数
- P1028 数的计算