`

sqlserver identity总结

 
阅读更多
想要将值插入到自动编号(或者说是标识列,IDENTITY)中去,需要设定 SET IDENTITY_INSERT

示例:

1.首先建立一个有标识列的表:
CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))

2.尝试在表中做以下操作:
INSERT INTO products (id, product) VALUES(3, 'garden shovel')

结果会导致错误:“当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'products' 中的标识列插入显式值。”

3.改用:
SET IDENTITY_INSERT products ON
INSERT INTO products (id, product) VALUES(1, 'garden shovel')

返回正确。

4.建立另外一个表products2,尝试相同插入操作:
CREATE TABLE products2 (id int IDENTITY PRIMARY KEY, product varchar(40))

然后执行:
SET IDENTITY_INSERT products2 ON
INSERT INTO products2 (id, product) VALUES(1, 'garden shovel')

导致错误:“表 'material.dbo.products' 的 IDENTITY_INSERT 已经为 ON。无法对表 'products2' 执行 SET 操作。”

改为执行:
SET IDENTITY_INSERT products OFF
SET IDENTITY_INSERT products2 ON
INSERT INTO products2 (id, product) VALUES(2, 'garden shovel')

执行通过。

5.尝试以下操作:
SET IDENTITY_INSERT products2 ON
INSERT INTO products2     SELECT * FROM products

导致错误:“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'products2' 中为标识列指定显式值。”

6.改为:
SET IDENTITY_INSERT products2 ON
INSERT INTO products2     (id, product)     SELECT * FROM products

执行通过。

总结:

1.每一次连接会话中的任一时刻,只能对一个表设置IDENTITY_INSERT ON,且设置只对当前会话有效;
2.在对标识列执行插入操作进,一定要列出此标识列(当然,同时也就需要列出相关的其他列了)。

附:
SQL Server帮助文档相关内容

SET IDENTITY_INSERT
允许将显式值插入表的标识列中。

语法
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }

参数
database

是指定的表所驻留的数据库名称。

owner

是表所有者的名称。

table

是含有标识列的表名。

注释
任何时候,会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,并且为另一个表发出了 SET IDENTITY_INSERT ON 语句,则 Microsoft® SQL Server™ 返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON 并报告此属性已设置为 ON 的表。

如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用。

SET IDENTITY_INSERT 的设置是在执行或运行时设置,而不是在分析时设置。

权限
执行权限默认授予 sysadmin 固定服务器角色和 db_owner 及 db_ddladmin 固定数据库角色以及对象所有者。

示例
下例创建一个含有标识列的表,并显示如何使用 SET IDENTITY_INSERT 设置填充由 DELETE 语句导致的标识值中的空隙。

-- Create products table.
CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
GO
-- Inserting values into products table.
INSERT INTO products (product) VALUES ('screwdriver')
INSERT INTO products (product) VALUES ('hammer')
INSERT INTO products (product) VALUES ('saw')
INSERT INTO products (product) VALUES ('shovel')
GO

-- Create a gap in the identity values.
DELETE products
WHERE product = 'saw'
GO

SELECT *
FROM products
GO

-- Attempt to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO products (id, product) VALUES(3, 'garden shovel')
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT products ON
GO

-- Attempt to insert an explicit ID value of 3
INSERT INTO products (id, product) VALUES(3, 'garden shovel').
GO

SELECT *
FROM products
GO
-- Drop products table.
DROP TABLE products
GO
分享到:
评论

相关推荐

    oracle与SQL server的语法差异总结

    - SQL Server则在表中有一个自动增长列(如 `IDENTITY`),无需单独创建序列对象。 9. **SELECT语法**: - Oracle允许将查询结果集作为一个临时表使用,如 `SELECT * FROM (SELECT * FROM tab1)`,并且有虚表DUAL...

    sqlserver管理员手册

    ### SQLServer管理员手册知识点概述 #### 一、SQL Server 2000概览 - **SQL Server系统介绍**:本章节将详细介绍SQL Server 2000的基础知识,包括其核心组件、服务以及与其他软件的集成方式。 - **新特性和功能**:...

    个人SQLSERver总结

    SQLServer是微软公司推出的一种关系型数据库管理系统,广泛应用于数据存储和管理。下面是对SQLServer中涉及的一些核心知识点的详细解释: ### 数据库设计 在设计数据库时,我们需要遵循一定的步骤来确保数据的有效...

    ASP.NET+SQL Server 系统开发实例

    ASP.NET和SQL Server是开发企业级Web应用的常用技术栈,它们在构建高效、安全且可扩展的系统中发挥着关键作用。在这个"ASP.NET+SQL Server 系统开发实例"中,我们可以深入理解这两项技术如何协同工作,构建出实际的...

    sqlserver与myqsql区别

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

    Flash连接SQLServer数据库

    ### Flash连接SQLServer数据库知识点详解 #### 一、引言 随着互联网技术的发展,Flash作为一种广泛使用的多媒体技术,在网络动画、交互式应用等方面发挥了重要作用。然而,为了实现更丰富的功能和更强的数据处理...

    导出SQL server2005表字段信息说明

    ### 导出SQL Server 2005表字段信息说明 在进行数据库管理与维护时,经常需要了解数据库中各个表的字段详细信息,包括字段名称、数据类型、是否为主键、长度、精度等属性。本文将通过一个SQL查询语句来详细解析如何...

    sqlserver数据库操作笔记

    ### SQL Server 数据库操作知识点详解 #### 一、SQL Server 的安装与配置 **1. 安装步骤:** - **准备阶段:** 首先确保安装环境中满足SQL Server的最低硬件要求,并且操作系统兼容。 - **安装介质:** 获取SQL ...

    SQLserver知识点大全总结(全)

    SQL Server 知识点大全总结 SQL Server 是微软公司推出的关系数据库管理系统,广泛应用于企业级数据库管理和开发中。下面是 SQL Server 的知识点总结。 数据库基本概念 * 数据库(Database):存储有组织的数据的...

    解决sqlserver 2012 中ID 自动增长 1000的问题.zip

    总结,解决SQL Server 2012中自增ID增加1000或2000的问题,关键在于理解自增ID的工作原理,以及可能影响它的各种因素。通过检查当前状态、调整设置、合理恢复数据和优化导入过程,可以有效地避免此类问题。同时,...

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

    总结,遍历SQL Server表中的记录,可以采用表变量配合循环的方式,或者使用游标。表变量方法简洁且对数据的影响可控,但可能需要额外删除已处理的行。游标提供了逐行处理的灵活性,但效率较低,应作为最后的手段。在...

    利用索引提高SQLServer数据处理效率

    总结来说,优化SQL Server的索引设计是一个综合考虑查询性能、数据更新成本和存储空间的复杂过程。合理使用聚簇索引、非聚簇索引和覆盖索引,结合对查询模式的深入理解和系统负载的实时监控,可以显著提高SQL Server...

    sqlserver2005技术分享

    总结起来,掌握SQL Server 2005的内置函数和存储过程是提升数据库管理技能的关键步骤。通过深入学习和实践,我们可以更好地驾驭这个强大的工具,解决各种数据处理和管理问题。在实际工作中,不断探索和优化,才能...

    SQL Server用法总结.pdf

    本文将基于提供的内容,总结SQL Server的主要用法,包括创建数据库、表、默认值、规则、标识列、视图、索引以及存储过程等。 1. **创建数据库**: 使用`CREATE DATABASE`语句可以创建新的数据库,例如`CREATE ...

    使用SQL查询 生成sql server数据库结构字典 生成html

    SQL Server数据库字典可以帮助我们清晰地看到每张表的结构、各字段的定义等信息。下面将详细介绍如何使用SQL查询快速生成SQL Server数据库的结构字典,并将其格式化输出为易于阅读的HTML文档。 #### SQL查询生成...

    sql server数据库教程详解

    ### SQL Server 数据库教程详解 #### 一、引言 SQL Server 是一款广泛使用的数据库管理系统,主要用于存储和管理大量数据。对于初学者来说,掌握 SQL Server 的基本操作是非常重要的。本教程将从基础入手,逐步深入...

    SQL Server用法总结.docx

    以下是对标题"SQL Server用法总结"中涉及的一些核心知识点的详细说明: 1. **创建数据库**:使用 `CREATE DATABASE` 语句可以创建新的数据库。例如,`CREATE DATABASE baiyunfei;` 将创建一个名为 "baiyunfei" 的...

Global site tag (gtag.js) - Google Analytics