漫谈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`是一个重要的命令,它主要用于处理标识列(即自动编号列,通常由`IDENTITY`关键字定义)...
在SQL Server中,`identity` 是一种特殊的数据类型属性,用于创建自动递增的字段,通常用在主键上,确保每条记录都有一个唯一的标识符。以下是对`identity`属性的详细解释: ### 一、`identity`的基本用法 1. **...
sql server 中如何增加递增的序号列 sql server 是一种功能强大且广泛应用的关系数据库管理系统,随着业务的发展和数据的增长,对于数据的管理和处理变得越来越重要。在 sql server 中,增加递增的序号列是非常...
- `CURRVAL`和`NEXTVAL`在Oracle中处理序列,SQL Server中使用`IDENT_CURRENT`和`IDENTITY`属性。 - `NULLIF`在Oracle和SQL Server中用于比较并返回NULL。 - `UID`、`SUSER_ID`、`USER_ID`、`USER`、`CURRENT_...
在SQL Server中,自增字段通常通过`IDENTITY`属性实现,它会自动为新插入的行生成一个唯一的序列号。然而,在Oracle数据库系统中,没有直接对应的`IDENTITY`功能,但可以通过其他方式来模拟这个行为。这里我们将讨论...
本篇文章将深入解析“SqlServer查看表结构”的方法,以及如何利用SQL语句来获取详细的表结构信息,这对于数据库管理员(DBA)、数据分析师、软件开发者等专业人士来说尤为关键。 ### SQL Server查看表结构的重要性 ...
- **MS SQL Server** 使用 `IDENTITY` 属性自动生成唯一键。 - **PostgreSQL** 使用 `SEQUENCE` 对象生成唯一键。 #### 递归查询 - **MS SQL Server** 使用 `WITH RECURSIVE` 进行递归查询。 - **PostgreSQL** 同样...
"使用 SQL Server 数据库中查询累计值的方法" SQL Server 是一个功能强大且广泛使用的关系数据库管理系统,通过它可以对数据进行高效的存储、管理和查询。在实际应用中,我们经常需要对数据进行累计计算,例如银行...
打开sqlserver 应用程序与开启关闭sqlserver服务命令
SQL Server 中的 SCOPE_IDENTITY() 函数可以获取当前会话中的最后一个插入的标识符,而在 MySQL 中,需要使用 last_insert_id() 函数来获取当前会话中的最后一个插入的标识符。 8. if 语句 SQL Server 中的 if ...
在SQL Server数据库管理系统中,自动增长(Identity)字段是一个非常重要的特性,主要用于为表中的记录生成唯一的标识符,通常作为主键使用。本教程将详细解释如何在SQL Server中设置和管理自动增长字段。 首先,...
"SQL Server死锁的解除方法" SQL Server死锁是指在多个事务之间的资源竞争时,出现的循环等待资源的现象。死锁会导致系统性能下降,甚至会导致系统崩溃。因此,解决SQL Server死锁是非常重要的。 SQL Server死锁的...
标题中提到的是“sqlserver与mysql区别”,而描述部分明确指出“MS SQL不支持limit语句”,并给出了一些替代方案,比如使用top和row_number() over()函数。下面将围绕标题和描述,结合部分内容,详细阐述SQL Server...
在SQL Server中,遍历表中的记录是数据库操作中常见的一种任务,特别是在处理逐行处理数据或执行复杂逻辑时。本文将深入探讨两种方法:使用表变量和使用游标。 首先,我们来看如何通过表变量来遍历记录。表变量在...
在 SqlServer 中,使用 SCOPE_IDENTITY() 函数来获取当前范围的最后一个插入的 id,而在 MySql 中,使用 last_insert_id() 函数来获取当前范围的最后一个插入的 id。 八、if...else 语句 在 SqlServer 中,使用 IF...
本篇文章主要介绍如何在SQL Server中使用触发器来实现数据的自动插入功能。触发器是一种存储过程,它定义在特定的表上,并且在特定的事件(如插入、更新或删除操作)发生时自动执行。 #### 二、描述详解 描述中的...
在 SQL Server 中,我们可以使用 SCOPE_IDENTITY 函数来取得刚刚插入的最大流水号。SCOPE_IDENTITY 函数返回当前会话中的最后一个身份值。下面是一个简单的示例代码: ```sql create table Tradeinfo( Trade_id ...
在SQL Server中,有时我们需要将现有表中的特定数据导出为INSERT语句,以便在其他数据库或备份中重建这些记录。这通常在迁移数据、创建测试数据或者进行数据备份时非常有用。以下是如何将SQL Server表中指定数据转化...
sql server 2014 JSON解析到表函数 CREATE FUNCTION [dbo].[parseJSON]( @JSON NVARCHAR(MAX)) RETURNS @hierarchy TABLE ( element_id INT IDENTITY(1, 1) NOT NULL, ...