zoukankan      html  css  js  c++  java
  • 【转载】关于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)能够用于即便有外键的状况下。

  • 相关阅读:
    [Cocos2d-x]Cocos2d-x开发中C++调用Object-c
    [数据结构]基本概念
    [Cocos2d-x]Mac下运行HelloCpp For Android
    [Android] JDK , NDK , JNI
    [Cocos2d-x]坐标系
    [Android]mac下开发环境搭建
    [Cocos2d-x]博客推荐
    nyoj-506-洗澡
    nyoj-479-Coprimes
    nyoj-464-Cookies
  • 原文地址:https://www.cnblogs.com/wbpmrck/p/1858466.html
Copyright © 2011-2022 走看看