`
iwindyforest
  • 浏览: 235081 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SqlServer标识列

 
阅读更多

一、标识列的定义以及特点

SQL Server中的标识列又称标识符列,习惯上又叫自增列。
该种列具有以下三种特点:

1、列的数据类型为不带小数的数值类型
2、在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值
3、列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列。

由于以上特点,使得标识列在数据库的设计中得到广泛的使用。

二、标识列的组成
创建一个标识列,通常要指定三个内容:
1、类型(type)
在SQL Server 2000中,标识列类型必须是数值类型,如下:
decimal、int、numeric、smallint、bigint 、tinyint
其中要注意的是,当选择decimal和numeric时,小数位数必须为零
另外还要注意每种数据类型所有表示的数值范围

2、种子(seed)
是指派给表中第一行的值,默认为1

3、递增量(increment)
相邻两个标识值之间的增量,默认为1。

三、标识列的创建与修改
标识列的创建与修改,通常在企业管理器和用Transact-SQL语句都可实现,使用企业管理管理器比较简单,请参考SQL Server的联机帮助,这

里只讨论使用Transact-SQL的方法

1、创建表时指定标识列
标识列可用 IDENTITY 属性建立,因此在SQL Server中,又称标识列为具有IDENTITY属性的列或IDENTITY列。
下面的例子创建一个包含名为ID,类型为int,种子为1,递增量为1的标识列
CREATE TABLE T_test
(ID int IDENTITY(1,1),
Name varchar(50)
)

2、在现有表中添加标识列
下面的例子向表T_test中添加一个名为ID,类型为int,种子为1,递增量为1的标识列
--创建表
CREATE TABLE T_test
(Name varchar(50)
)

--插入数据
INSERT T_test(Name) VALUES('张三')

--增加标识列
ALTER TABLE T_test
ADD ID int IDENTITY(1,1)

3、判段一个表是否具有标识列

可以使用 OBJECTPROPERTY 函数确定一个表是否具有 IDENTITY(标识)列,用法:
Select OBJECTPROPERTY(OBJECT_ID('表名'),'TableHasIdentity')
如果有,则返回1,否则返回0

4、判断某列是否是标识列

可使用 COLUMNPROPERTY 函数确定 某列是否具有IDENTITY 属性,用法
SELECT COLUMNPROPERTY( OBJECT_ID('表名'),'列名','IsIdentity')
如果该列为标识列,则返回1,否则返回0

4、查询某表标识列的列名
SQL Server中没有现成的函数实现此功能,实现的SQL语句如下
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns
   WHERE TABLE_NAME='表名' AND  COLUMNPROPERTY(    
      OBJECT_ID('表名'),COLUMN_NAME,'IsIdentity')=1

5、标识列的引用

如果在SQL语句中引用标识列,可用关键字IDENTITYCOL代替
例如,若要查询上例中ID等于1的行,
以下两条查询语句是等价的
SELECT * FROM T_test WHERE IDENTITYCOL=1
SELECT * FROM T_test WHERE ID=1

6、获取标识列的种子值

可使用函数IDENT_SEED,用法:
SELECT IDENT_SEED ('表名')

7、获取标识列的递增量

可使用函数IDENT_INCR ,用法:
SELECT IDENT_INCR('表名')

8、获取指定表中最后生成的标识值

可使用函数IDENT_CURRENT,用法:
SELECT IDENT_CURRENT('表名')
注意事项:当包含标识列的表刚刚创建,为经过任何插入操作时,使用IDENT_CURRENT函数得到的值为标识列的种子值,这一点在开发数据库应用程序的时候尤其应该注意。

9.[SQL Server]关于标识列从1开始计数的问题
      在SQL Server中,  我们有时需要在清空数据表之后,重新添加记录时,标识列重新从1开始计数。
我们只需要在插入记录之前,执行下面的命令:
      DBCC CHECKIDENT (表名,  RESEED, 0)
执行 TRUNCATE TABLE 也可以做到,而且效率高因为:

用delete将会把每个操作记录到日志中,所以效率低 ,truncate table则一次过,效率快很多。
但是,Truncate Table有限制,比如说这个标识列是另外一个表的外键,而且标识列当前值为1,插入行从2开始,

而DBCC CHECKIDENT (表名, RESEED, 0)可以用于即使有外键的情况下。

分享到:
评论

相关推荐

    标识列与普通列相互转换示例

    标识列与普通列相互转的示例 --创建测试表 CREATE TABLE t1(ID int IDENTITY,A int) GO --插入记录 INSERT t1 VALUES(1) GO --1. 将IDENTITY(标识)列变为普通列 ALTER TABLE t1 ADD ID_temp int GO UPDATE t1 SET ...

    SQLServer-让标识列重新开始计算

    ### SQL Server - 让标识列重新开始计算 在SQL Server中,标识列(Identity Column)是一种自增型字段,常用于自动为表中的记录分配唯一的序列号。这在创建主键或唯一索引时非常有用,尤其是在需要为新记录自动分配...

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

    如果我们在标识列中插入值,例如: 代码如下:insert member(id,username) values(10,’admin’) 则在查询分析器里面会返回错误信息: [plain] 引用内容 服务器: 消息 544,级别 16,状态 1,行 1 当 IDENTITY_...

    SQL Server修改标识列方法 如自增列的批量化修改

    代码如下: –允许对系统表进行更新 exec sp_configure ‘allow updates’,1 reconfigure with override GO –取消标识列标记 update syscolumns set colstat = 0 where id = object_id(‘tablename’) and colstat ...

    SQL SERVER 自增列

    SQL SERVER 自增列,也称为标识列,是数据库设计中常用的一种特性,特别是在关系型数据库管理系统如SQL Server中。自增列通常用作主键的一部分,自动递增其值,为新插入的每一行提供一个唯一的标识。这极大地方便了...

    SQLServer数据库高级应用(图文)

    #### 四、SQL Server 标识列的重置功能 - **标识列重置**: 如果需要重新开始生成标识列的值,可以使用`DBCC CHECKIDENT`命令。例如,如果需要重置表`tt`的标识列值从0开始,可以执行`DBCC CHECKIDENT ('tt', RESEED...

    SQL SERVER中自动标识列的改进.pdf

    "SQL SERVER中自动标识列的改进" 本文讨论了SQL SERVER中自动标识列的两大限制:一是初始值只能是整型的数据,无法使用文本型数据或包含前导零的文本型数据;二是删除表中的记录或删除记录后再插入记录将导致表中的...

    SQL Server 不删除信息重新恢复自动编号列的序号的方法

    在SQL Server中,当我们在一个表中使用了自动编号(Identity)列来为新插入的行生成唯一的标识符时,可能会遇到这样的情况:在测试或数据清理后,想要重置这个序列,以便再次从头开始计数。这个问题的焦点在于如何在...

    SQL server列自动增加方法

    这个特性在SQL Server中被称为“标识列”(Identity Column)。下面我们将详细讲解如何设置和使用SQL Server列的自动增加功能。 1. **标识列的定义**: 标识列是一种特殊类型的整数列,其值由SQL Server自动递增。...

    SQL SERVER 2005/2008 Express Profiler

    每个事件类别下又包含多个事件,比如“SQL:BatchStarting”表示批次SQL语句开始执行,而“Lock:Deadlock”则标识了发生死锁的情况。 2. **追踪模板**:预定义的追踪模板如“标准”、“跟踪SQL Server审计”等,可...

    kepserver读取SQL Server数据库

    在这里,你需要定义DSN(Data Source Name),这可以是任意名称,用于标识你要连接的SQL Server。在描述中,可以输入简短说明,便于记忆。首次连接时,输入SQL Server所在的计算机IP地址。然后,选择"使用用户输入...

    SqlServer查看表结构

    本篇文章将深入解析“SqlServer查看表结构”的方法,以及如何利用SQL语句来获取详细的表结构信息,这对于数据库管理员(DBA)、数据分析师、软件开发者等专业人士来说尤为关键。 ### SQL Server查看表结构的重要性 ...

    Sql修改标示列的方法

    在Microsoft SQL Server中,为了修改标识列,首先需要启用对系统表的更新权限。这是因为标识列的信息存储在系统表`syscolumns`中,而默认情况下,用户是不允许直接更新这些系统表的。启用更新权限可以通过以下步骤...

    SQL server大作业

    在本“SQL Server大作业”中,我们主要探讨的是如何使用SQL Server进行数据库的设计与实现。这个作业可能包括了从需求分析、概念模型设计、逻辑结构设计到物理结构设计的全过程,同时也涉及到SQL语言的使用,如数据...

    SQL Server 之 SET IDENTITY_INSERT

    在SQL Server中,`SET IDENTITY_INSERT`是一个重要的命令,它主要用于处理标识列(即自动编号列,通常由`IDENTITY`关键字定义)的显式赋值问题。默认情况下,当向一个包含`IDENTITY`属性的表中插入数据时,标识列的...

    SqlServer数据库的数据类型

    ### SqlServer数据库的数据类型详解 数据类型在编程与数据库管理中扮演着至关重要的角色,它不仅定义了数据的存储方式,还决定了数据可以执行的操作。SQL Server作为一种广泛使用的数据库管理系统,提供了丰富的...

    sqlserver使用UNPIVOT函数列转行

    ### SQL Server 使用 UNPIVOT 函数实现列转行 #### 概述 在 SQL Server 中,`UNPIVOT` 函数是一个非常实用的功能,主要用于将数据表中的列转换为行,即“列转行”操作。这种操作在数据分析过程中经常用到,尤其是...

    CDC操作Sqlserver2008

    ### CDC操作Sqlserver2008 #### 概述 变更数据捕获(Change Data Capture,简称CDC)是SQL Server的一项重要功能,主要用于记录数据库表中的数据更改历史。这一功能在进行数据分析、日志记录、数据复制等场景下...

    SQL Server2005基本方法和语句

    主键是表中用于唯一标识每条记录的一列或一组列。可以使用以下语句添加或删除主键: - 添加主键: ```sql ALTER TABLE tabname ADD PRIMARY KEY (col); ``` - 删除主键: ```sql ALTER TABLE tabname DROP ...

Global site tag (gtag.js) - Google Analytics