SQLServer“标识列”的相关问题

   下面我们看一张表:想一想在数据库SQLServer中我们如何能更简便的向这张表格中添加数据呢?


  仔细观察此表我们不难发现,ID字段的这列数据的添充是有规律可循的,它是一个等比自增的数列,向数据表中添加这样的数据有没有简单的方法呢?

  这就谈到了SQLServer标识列的问题。我查询一些资料做了总结,在此和大家一起分享受与交流。

  (1)标识列的定义

  标识列,(通常也称为“标识字段”或者称为“自动增长字段”)是一行记录区别其它记录的标识,为的也是能唯一地检索出该行记录。

  注意:一个表中只能有一个标识列(标识字段),一般是把“主键”设为标识列。

  (2)如何把一个字段设为标识列?

  下面我以SQLServer2008为例来看一下它的设置步骤:

  如:右键单击——表Person3,左键单击——“设计”属性,然后选中要设为标识列的字段,在“标识规范”中,将字段的“是标识”设为“是”,最后关闭此窗口,保存即可。


  从上图中“标识规范”中看到,标识列中还有个“标识种子”和“标识增量”,主要是为了避免重复值的出现,便于查询。

  1. 标识种子 是开始的数是多少,默认为1。

  2. 标识增量(也称为增长种子)是每增加一条数据增加的值是多少,默认为1。

  3. 标识列不容许插入值,是自动给值的,强制给会报错。

  identity(1,1) 那么该列标识种子是1,增长种子也是1。第一个参数是标实种子,第二个参数是增长种子。

  注意:在设置标识列之前,要在—‘工具’菜单中找到—‘选项’—在选项中—把‘阻止保存要求重新建表的更改’的“√”去掉,否则SQLServer要修改表的标识列没法修改。


  (3)设置标识列的好处

  标识列是自动增长的,从种子开始,依次递增,递增量位自己设置的。比如:种子是1,增长量为1,那么标识列的值是:1、2、3、4、5……依次类推。所以你写Insert语句的时候,不用写标识列的值。

  也就是说:标识列实现了字段自增,解决的是并发的问题,不用开发人员控制自增,SQLServer会自动分配标识列的值,如果两个人同时往数据库里面插数据时,将会产生唯一的自动增加为标识.

时间: 2016-04-10

SQLServer“标识列”的相关问题的相关文章

SQL Server如何重置Identity标识列的值

一.背景 SQL Server数据库中表A中Id字段的定义是:[Id] [int] IDENTITY(1,1),随着数据的不断增长,Id值已经接近2147483647(int的取值范围为:-2 147 483 648 到 2 147 483 647)了,虽然已经对旧数据进行归档,但是这个表需要保留最近的1亿数据,有什么方法解决Id值就快爆的问题呢? 解决上面的问题有两个办法:一个是修改表结构,把Id的int数据类型修改为bigint:第二个是重置Id(Identity标识列)的值,使它重新增长.

SQL Server 重置Identity标识列的值(INT爆了)

原文 http://www.cnblogs.com/gaizai/archive/2013/04/23/3038318.html SQL Server 重置Identity标识列的值(INT爆了) 2013-04-23 17:45 by 听风吹雨, 1146 阅读, 16 评论, 收藏, 编辑 一.背景 SQL Server数据库中表A中Id字段的定义是:[Id] [int] IDENTITY(1,1),随着数据的不断增长,Id值已经接近2147483647(int的取值范围为:-2 147 4

初学者:sqlserver2005建表时 如果是应用在asp.net 中,是否必须加id 字段,并设为主键且是int型的,而且是唯一标识列?

问题描述 sqlserver2005建表时如果是应用在asp.net中,是否必须加id字段,并设为主键且是int型的,而且是唯一标识列?以前建表时,只在sqlserver2005中进行查询删除修改追加,和.net不发生关系,现在要与.net相联系,是否加id字段? 解决方案 解决方案二:加与业务数据无关的主键是数据库设计规范...和SQLServer并无关系与.NET更无关系...通常主键用连续增长的32位整型数以保证唯一性...分布式应用则推荐GUID类型...解决方案三:不用,写个存储过程就

SQL:插入指定标识列的数据时候的小错误

异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html 后期会在博客首发更新:http://dnt.dkill.net 好久没写标识系列的代码了,刚写就报了个错 SQL: set identity_insert ShopModelBak on insert into ShopModelBak values(5,N'lll',1,1) set identity_insert ShopModelBak off 咋一看,好像没啥错啊?但

漫谈SQL Server中的标识列(二)

server 这篇文章主要总结一下标识列在复制中的处理方法 1.快照复制   在快照复制中,通常无须考虑标识列的属性. 2.事务复制   举例:   发布数据库A,订阅数据库B,出版物为T_test_A,订阅表为T_test_B   CREATE TABLE T_test_A (ID int IDENTITY(1,1),  Name varchar(50) )   CREATE TABLE T_test_B (ID int IDENTITY(1,1),  Name varchar(50) )  

漫谈SQL Server中的标识列(一)

server 漫谈SQL Server中的标识列(一) 一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点: 1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值3.列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列. 由于以上特点,使得标识列在数据库的设计中得到广泛的使用. 二.标识列的组成创建一个标识列,通常要指定三个内容:1.类型(type)在SQL Ser

关于SQL表中的[LEVEL]以及怎样用DATATABLE获取标识列的数值?

问题描述 关于SQL表中的[LEVEL]以及怎样用DATATABLE获取标识列的数值? 用SQL2014的时候我是想设置一列名为level,表达的意思就是标记表中一行字段的身份级别,但是按ENTER以后, level两边就多了中括号,变成了[level],而且也不能用DATATABLE获取了. 同样的问题,在表中如果有一列为标识列,例如名为ID(会随着表中数据的增加,自动增加数值), 同样,用DATATABLE获取该表中ID的值的时候也会提示错误信息,错误信息为"列'ID'不属于表".

server数据库-SQL查询添加临时标识列

问题描述 SQL查询添加临时标识列 在做一个排行查询,但是数据没有标识列,所以想在查询的时候加一条临时的标识列,该怎么写sql语句呢? 解决方案 为查询结果添加一个标识列 解决方案二: MYSQLhttp://blog.csdn.net/ijong/article/details/7068265 SQL_SERVERhttp://www.2cto.com/database/201205/132643.html

SQL Server手工插入标识列的方法_MsSql

如果我们在标识列中插入值,例如: 复制代码 代码如下: insert member(id,username) values(10,'admin')   则在查询分析器里面会返回错误信息: [plain]  引用内容   服务器: 消息 544,级别 16,状态 1,行 1   当 IDENTITY_Insert 设置为 OFF 时,不能向表 'member' 中的标识列插入显式值.   有的情况我们需要手动插入标识列的值,例如删除了一些记录后,标识列并不连续,而我们又想把它补齐.我们利用一个开关