`

SQL Server 中的identity

阅读更多
漫谈SQL Server中的标识列
http://blog.csdn.net/jhlxge/archive/2008/07/31/2742969.aspx




SQL SERVER 中identity用法:
在数据库中, 常用的一个流水编号通常会使用 identity 栏位来进行设置, 这种编号的好处是一定不会重覆, 而且一定是唯一的, 这对table中的唯一值特性很重要, 通常用来做客户编号, 订单编号等功能, 以下介绍关于此种栏位常用方式及相关技术.
CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))

取得identity值:
因为 identity 特性, 所以在 insert into 该 table 时, 不能指定该 identity 栏位值, 仅能指定其他栏位值, 而 identity 由资料库维护, 所以一般要在 insert 后取得该 identity 栏位值, 则通常使用下面方式:

利用全局变量 @@identity 来取得最后影响的 insert 后产生的 identity 值, 如此一来便能方便地使用 identity 栏位.

若要启用识别插入(identity insert)时, 也就是如空缺号要指定 identity 栏位值时, 或者是处理资料表整理或备出时, 会用到的方式:
set identity_insert products on
insert into products (id, product)values(12, 'screwdriver')
要注意的地方是可以 insert 空缺号, 也可以加至最后, 但係统会自动更新 identity 至最大值, 要注意一旦启用 identity_insert 时, 就一定要给定 identity 值, 另外并不能 update 该 identity 栏位值, 也就是说 identity_insert 该 identity 栏位仅 for insert, 不能 update.

查询目前 identity 值:
有时我们需要查询目前 table 中该 identity 栏位最大值是多少时, 可以利用 dbcc 指令, 如下:
dbcc checkident('product', NORESEED)
可以获得目前最大值的结果.

重设目前最大 identity 值:
一样利用 dbcc 指令, 如下:
dbcc checkident('product',RESEED,100)
如此一来, 便能将目前的最大 identity 值指向100, 当然若故意设比目前最大值小时, 係统仍会接受, 但若 identity 遇上重覆资料时(如将 identity 设为 primary key时), 将会发生重大问题, 该 table 变成无法 insert 资料, 因为会发生 primary key violation, 解决方法当然就是将目前的 identity 修復, 直接使用
dbcc checkident('products', RESEED)

dbcc checkident('products')



在SQL Server数据库中为标识(IDENTITY)列插入显式值:
SET IDENTITY_Insert [TableName] ON
如:
SET IDENTITY_Insert member ON 
insert member(id,username) values(1,'admin') 
SET IDENTITY_Insert member OFF 

插入显式值后并不影响原来的identity值的大小。
分享到:
评论

相关推荐

    SQL Server 之 SET IDENTITY_INSERT

    ### SQL Server 中 SET IDENTITY_INSERT 的使用方法及注意事项 #### 标题与描述解析 在SQL Server中,`SET IDENTITY_INSERT`是一个重要的命令,它主要用于处理标识列(即自动编号列,通常由`IDENTITY`关键字定义)...

    SQL Server中identity(自增)的用法详解

    在SQL Server中,`identity` 是一种特殊的数据类型属性,用于创建自动递增的字段,通常用在主键上,确保每条记录都有一个唯一的标识符。以下是对`identity`属性的详细解释: ### 一、`identity`的基本用法 1. **...

    sql server 中如何增加递增的序号列【实用】

    sql server 中如何增加递增的序号列 sql server 是一种功能强大且广泛应用的关系数据库管理系统,随着业务的发展和数据的增长,对于数据的管理和处理变得越来越重要。在 sql server 中,增加递增的序号列是非常...

    sqlserver-oracle 数据类型对照

    - `CURRVAL`和`NEXTVAL`在Oracle中处理序列,SQL Server中使用`IDENT_CURRENT`和`IDENTITY`属性。 - `NULLIF`在Oracle和SQL Server中用于比较并返回NULL。 - `UID`、`SUSER_ID`、`USER_ID`、`USER`、`CURRENT_...

    Oracle 实现类似SQL Server中自增字段的一个办法

    在SQL Server中,自增字段通常通过`IDENTITY`属性实现,它会自动为新插入的行生成一个唯一的序列号。然而,在Oracle数据库系统中,没有直接对应的`IDENTITY`功能,但可以通过其他方式来模拟这个行为。这里我们将讨论...

    SqlServer查看表结构

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

    PostgreSQL_与_MS_SQLServer比较

    - **MS SQL Server** 使用 `IDENTITY` 属性自动生成唯一键。 - **PostgreSQL** 使用 `SEQUENCE` 对象生成唯一键。 #### 递归查询 - **MS SQL Server** 使用 `WITH RECURSIVE` 进行递归查询。 - **PostgreSQL** 同样...

    如何使用SQL Server数据库中查询累计值

    "使用 SQL Server 数据库中查询累计值的方法" SQL Server 是一个功能强大且广泛使用的关系数据库管理系统,通过它可以对数据进行高效的存储、管理和查询。在实际应用中,我们经常需要对数据进行累计计算,例如银行...

    打开sqlserver应用程序,开启关闭服务命令

    打开sqlserver 应用程序与开启关闭sqlserver服务命令

    mysql和SQLserver区别.docx

    SQL Server 中的 SCOPE_IDENTITY() 函数可以获取当前会话中的最后一个插入的标识符,而在 MySQL 中,需要使用 last_insert_id() 函数来获取当前会话中的最后一个插入的标识符。 8. if 语句 SQL Server 中的 if ...

    sqlserver自动增长字段设置方法.rar

    在SQL Server数据库管理系统中,自动增长(Identity)字段是一个非常重要的特性,主要用于为表中的记录生成唯一的标识符,通常作为主键使用。本教程将详细解释如何在SQL Server中设置和管理自动增长字段。 首先,...

    SQL Server死锁的解除方法

    "SQL Server死锁的解除方法" SQL Server死锁是指在多个事务之间的资源竞争时,出现的循环等待资源的现象。死锁会导致系统性能下降,甚至会导致系统崩溃。因此,解决SQL Server死锁是非常重要的。 SQL Server死锁的...

    sqlserver与myqsql区别

    标题中提到的是“sqlserver与mysql区别”,而描述部分明确指出“MS SQL不支持limit语句”,并给出了一些替代方案,比如使用top和row_number() over()函数。下面将围绕标题和描述,结合部分内容,详细阐述SQL Server...

    SQL Server遍历表中记录的2种方法(使用表变量和游标)

    在SQL Server中,遍历表中的记录是数据库操作中常见的一种任务,特别是在处理逐行处理数据或执行复杂逻辑时。本文将深入探讨两种方法:使用表变量和使用游标。 首先,我们来看如何通过表变量来遍历记录。表变量在...

    MySql与SqlServer的一些常用用法的差别

    在 SqlServer 中,使用 SCOPE_IDENTITY() 函数来获取当前范围的最后一个插入的 id,而在 MySql 中,使用 last_insert_id() 函数来获取当前范围的最后一个插入的 id。 八、if...else 语句 在 SqlServer 中,使用 IF...

    SQLSERVER触发器插入数据

    本篇文章主要介绍如何在SQL Server中使用触发器来实现数据的自动插入功能。触发器是一种存储过程,它定义在特定的表上,并且在特定的事件(如插入、更新或删除操作)发生时自动执行。 #### 二、描述详解 描述中的...

    解决SQLServer最大流水号的方法

    在 SQL Server 中,我们可以使用 SCOPE_IDENTITY 函数来取得刚刚插入的最大流水号。SCOPE_IDENTITY 函数返回当前会话中的最后一个身份值。下面是一个简单的示例代码: ```sql create table Tradeinfo( Trade_id ...

    将sqlserver表中指定数据转化为insert语句

    在SQL Server中,有时我们需要将现有表中的特定数据导出为INSERT语句,以便在其他数据库或备份中重建这些记录。这通常在迁移数据、创建测试数据或者进行数据备份时非常有用。以下是如何将SQL Server表中指定数据转化...

    Sql Server Json解析

    sql server 2014 JSON解析到表函数 CREATE FUNCTION [dbo].[parseJSON]( @JSON NVARCHAR(MAX)) RETURNS @hierarchy TABLE ( element_id INT IDENTITY(1, 1) NOT NULL, ...

Global site tag (gtag.js) - Google Analytics