SQL数据库中identity_insert的默认设置是什么?

3

我需要使用IDENTITY_INSERT ON导入一些数据到数据库中,导入后我需要将它设置回OFF吗?默认设置是什么?显然,我需要应用程序在每次向表添加记录/行时创建一个新的ID。


这是您的会话的属性,而不是表格的属性。 - Martin Smith
2个回答

8

默认设置取决于您在创建表时如何定义标识列,例如:

CREATE TABLE Table_Name(ID INT IDENTITY(1,1))
GO

这个ID列将有一个种子值为1,并且每次增加1。

默认情况下,您无法向Identity列添加值,但是您可以通过执行以下语句更改此默认行为。

SET IDENTITY_INSERT Table_Name ON;

在插入值后,您可以通过执行以下语句将其设置回默认行为。

SET IDENTITY_INSERT Table_Name OFF;

尽管我们可以向标识列传递值,但这不是一个好的实践,因为它是一个自动生成的数字。如果您自己向标识列添加值,然后标识列稍后生成相同的数字,您的标识列中可能会出现重复。
因此,最好将标识列保持原样,并让其为您生成值。
如果有必要向标识列添加值,则建议在每次使用Indet_Insert ON并向标识列添加一些值之后执行以下语句:
DBCC CHECKIDENT ( table_name, RESEED,  0) 
DBCC CHECKIDENT ( table_name, RESEED) 

第一条语句将重新启动Identity列的值,使其为Identity列中最小的值。

第二条RESEED语句如果没有提供任何Seed值,将重新生成Identity值,使其等于Identity列中的最高值加1。


0

如果有人在寻找一种在没有标识列的情况下创建密钥的方法:

CREATE TABLE [dbo].[TableName](
    [Id] [int] NOT NULL PRIMARY KEY
)

替代

CREATE TABLE [dbo].[TableName](
    [Id] [int] IDENTITY(1,1) NOT NULL
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接