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

Pet*_*eek 2 sql sql-server

我必须使用IDENTITY_INSERT ON将一些数据导入数据库,导入后我将其重新设置为OFF吗?什么是默认设置?显然,我需要应用程序将记录/行添加到表中,每次都创建一个新的ID.

M.A*_*Ali 6

默认设置取决于您在创建表时定义标识列的方式

CREATE TABLE Table_Name(ID INT IDENTITY(1,1))
GO
Run Code Online (Sandbox Code Playgroud)

此ID列的Seed值为1,并且递增1.

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

SET IDENTITY_INSERT Table_Name ON;
Run Code Online (Sandbox Code Playgroud)

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

SET IDENTITY_INSERT Table_Name OFF;
Run Code Online (Sandbox Code Playgroud)

即使我们可以将值传递给Identity列,但这不是一个好习惯,因为它是一个自动生成的数字,如果您自己将值添加到identity列中,然后Identity列生成相同的数字,您可以在您的身份中重复柱.

因此最好单独留下标识列,并让它为您生成值.

如果有必要向Identity列添加值,那么我建议在每次有Indet_Insert ON之后执行以下语句并向Identity列添加一些值,

DBCC CHECKIDENT ( table_name, RESEED,  0) 
DBCC CHECKIDENT ( table_name, RESEED) 
Run Code Online (Sandbox Code Playgroud)

第一个语句将Identity列的值重置为您的标识列中的最小值,

第二个RESEED语句没有提供任何种子值,会将Identity值重新设置为您的标识列中最高值的下一个可用值.