前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速对表的某字段赋递增的数值

快速对表的某字段赋递增的数值

作者头像
逸鹏
发布2018-04-10 10:37:22
5170
发布2018-04-10 10:37:22
举报
文章被收录于专栏:逸鹏说道逸鹏说道

假如有这张一张表,当时创建时没有用来存放递增的数值的int型字段。在使用的过程中,有这样的需求。

代码语言:javascript
复制
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:建表

插入测试数据

代码语言:javascript
复制
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,并设置为自增列)上做之外,还可以使用脚本来实现。用脚本来实现有一个好处是:如果表已有的数据已经很多时,有很大的优势。

代码语言:javascript
复制
ALTER TABLE T33 
ADD [id] INT DEFAULT(1) NOT NULL;GO

code-3:添加字段——id

有几种办法可以给新建的字段赋予递增的数值,可以使用循环,游标等,但使用CTE效率最高。这里使用的是row_number()窗口函数,其中order by子句不能缺少,又无需对表数据进行排序,所以加了select 1子句,优化器会知道这跟排序无关。

代码语言:javascript
复制
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:赋值

如果还要添加主键的话:

代码语言:javascript
复制
ALTER TABLE T33 ADD CONSTRAINT pk_T33_id PRIMARY KEY CLUSTERED (id);GO

code-5:添加主键

疑问:在添加id字段之前,是否可以使用脚本添加自增列?如何添加?

----------2016-01-08 18:00 更新--------

经过@goto13 的提醒,直接在添加id字段时,指定为自增列就已经可以实现最后的效果了。谢谢!不过使用CTE这种赋值也算是另一种思路吧。

代码语言:javascript
复制
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:添加自增列和主键约束

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我为Net狂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档