07 SQL Server中的Identity列(Identity Column in SQL Server)

如果创建新表的时候将一个列设置为Identity,那么在插入数据的时候可以不显示的指定值,SQL Server会自动填充该列的值。

Create Table tblPerson1
(
    PersonId Int Identity(1,1) Primary key Not Null,
    Name Nvarchar(50) null
)

此时,可用下面的代码向表中插入数据。虽然tblPerson表有两列,但在插入的时候只用指定Name的值即可,因为PersonId的属性为Identity,在插入数据时SQL Server会自动计算该值(起始值为1,增量为1)。

Insert Into tblPerson1
Values
(‘John‘)

但是,值得注意的是,如果我们显示的为tblPerson的PersonId指定一个值是不允许的,如下面的代码将会报错:

Insert Into tblPerson1
Values
(2,‘Marttin‘)

Msg 8101, Level 16, State 1, Line 1
An explicit value for the identity column in table ‘tblPerson1‘ can only be specified when a column list is used and IDENTITY_INSERT is ON.

意思是,如果要显示的为Indentity列设置值,必须在插入语句中指定列名以及将IDENTITY_INSERT设置为ON。

根据报错信息,现在我们首先使用下面语句将IDENTITY_INSERT设置为ON状态:

Set IDENTITY_INSERT tblPerson1 ON

然后在插入语句中显示的列出列名:

Insert Into tblPerson1(PersonId,Name)
Values
(2,‘Marttin‘)

这样PersonId为2,Name为“Marttin”的记录就成功插入了。

但是这样又有一个问题,当我们不想显示提供PersonId列的值又会报错了:

Insert Into tblPerson1
Values
(‘Marttin‘)

Msg 545, Level 16, State 1, Line 1
Explicit value must be specified for identity column in table ‘tblPerson1‘ either when IDENTITY_INSERT is set to ON or when a replication user is inserting into a NOT FOR REPLICATION identity column.

此时我们要将IDENTITY_INSERT设置为OFF:

Set IDENTITY_INSERT tblPerson1 OFF

这样就可以回到最开始的状态了。

现在有这样一种场景,我们将表中的数据清空,此时再向表中插入数据,PersonId的值会是多少呢?如下面的代码:

Delete From tblPerson1

Insert Into tblPerson1
Values
(‘Bob‘)

若查询数据库,我们得知tblPerson表中的值是:

PersonId  Name
4     Bob

如果我们想让PersonId重新开始计数,也就是新插入的值的PersonId为1,那么可以使用DBCC CHECKIDENT命令:

DBCC CHECKIDENT(‘tblPerson1‘,RESEED,0)

Checking identity information: current identity value ‘4‘, current column value ‘0‘.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

上面语句的意思是将identity 的值从4变成0,如果此时插入新的记录,那么PersonId的值将会是1

INSERT INTO tblPerson1
VALUES
(‘SARA‘)

查询结果:

PersonId  Name
1     SARA

时间: 2024-12-28 20:34:06

07 SQL Server中的Identity列(Identity Column in SQL Server)的相关文章

Sql Server中的标识列(自增长字段)

一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点: 1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值3.列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列. 由于以上特点,使得标识列在数据库的设计中得到广泛的使用. 二.标识列的组成创建一个标识列,通常要指定三个内容:1.类型(type)在SQL Server 2000中,标识列类型必须是数值类型,如下:de

SQL Server中的标识列

一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列. 该种列具有以下三种特点: 1.列的数据类型为不带小数的数值类型 2.在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值 3.列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列. 由于以上特点,使得标识列在数据库的设计中得到广泛的使用. 二.标识列的组成 创建一个标识列,通常要指定三个内容: 1.类型(type) 在SQL Server 2000中,标识列类型必须是数值类型

SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之前开发的系统要么因为历史原因用的是SQL2000要么根本用不着在SQL Server中启用CLR,所以一直没有尝试.最近因为项目的原因,在这方面做了一个调研,现在在这里分享一下心得. 首先要说明的是要在SQL Server中启用CLR必须是在SQL Server2005及以上版本,其次在默认情况下是

在 SharePoint 2013中使用 RelatedItems 列(Site column)

本文讲述 在 SharePoint 2013中使用 RelatedItems 列(Site column). RelatedItems 一个隐藏的 Site column,用于存储与当前列表项(List Item) 有关的其他文档或列表项. 比较有意思的是,添加和删除RelatedItem都是在 View Form,而不失Edit Form: 那么这个列既然是隐藏字段,怎么把它修改成可以加入到其他列表和文档库的公共字段(Site column)呢? a.打开站点设置(Site settings)

sql server中主键列的插入问题

仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'dbo.t_test'中的标识列指定显式值. SET IDENTITY_INSERT dbo.t_test ON INSERT INTO dbo.t_test(id,name) VALUES (4,'c') SET IDENTITY_INSERT dbo.t_test OFF

[转载]在SQL Server 中,如何实现DBF文件和SQL Server表之间的导入或者导出?

原来使用SQL Server 2000数据库,通过DTS工具很方便地在SQL Server和DBF文件之间进行数据的导入和导出,现在安装了SQL Server2005之后,发现其提供的“SQL Server导入导出向导”中的数据源没有原来的丰富,缺少对DBF文件的支持. 1.右击数据库,选择“任务”>“导入数据”,打开“SQL Server导入和导出向导”对话框.2.在“数据源”中选择Microsoft OLE DB Provider for Visual FoxPro,单击“属性”按钮,打开“

如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置

按如下所示分离数据库: use master go sp_detach_db 'mydb' go 然后,将数据和日志文件从当前位置 (D:\Mssql7\Data) 复制到新位置 (E:\Sqldata). 按如下所示重新附加指向新位置中这些文件的数据库: use master go sp_attach_db 'mydb','E:\Sqldata\mydbdata.mdf','E:\Sqldata\mydblog.ldf' go 使用 sp_helpfile 确认文件位置的更改: use myd

[转]细说SQL Server中的加密

简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在的机房,而是作为当数据库被破解或是备份被窃取后的最后一道防线.通过加密,使得未被授权的人在没有密钥或密码的情况下所窃取的数据变得毫无意义.这种做法不仅仅是为了你的数据安全,有时甚至是法律所要求的(像国内某知名IT网站泄漏密码这种事在中国可以道歉后不负任何责任了事,在米国妥妥的要破产清算). SQL

细说SQL Server中的加密【转】

简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在的机房,而是作为当数据库被破解或是备份被窃取后的最后一道防线.通过加密,使得未被授权的人在没有密钥或密码的情况下所窃取的数据变得毫无意义.这种做法不仅仅是为了你的数据安全,有时甚至是法律所要求的(像国内某知名IT网站泄漏密码这种事在中国可以道歉后不负任何责任了事,在米国妥妥的要破产清算). SQL