【问题标题】:identity_insert and table initialisation scriptidentity_insert 和表初始化脚本
【发布时间】:2023-09-10 16:38:01
【问题描述】:

我正在尝试创建一个表,其中一行 id=0 但标识插入列从 1,1 开始,因此所有后续都使用标识插入

我必须执行

DBCC CHECKIDENT ('Foo', RESEED, 0);

在我手动插入(使用脚本)以使下一行具有 id=1 之后 是否有另一种方法可以为我的第一行获取 id=0,它来自插入脚本,所有其他后续都从 1 开始,所以我不必调用 dbcc checkident

创建下表

CREATE TABLE [dbo].[Foo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [CreatedAt] [datetime] NOT NULL CONSTRAINT DF_Foo_CreatedAt DEFAULT getdate(),
    [ModifiedAt] [timestamp] NOT NULL,
    [Code] [nvarchar](50) NOT NULL,
    [Name] [nvarchar](50) NULL,
 CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
) ON [PRIMARY]
) ON [PRIMARY]

我想要一个 id=0 的行,所以我接下来运行以下命令

SET IDENTITY_INSERT [dbo].[Foo] ON;
INSERT INTO [dbo].[Foo] ([Id],[Code],[Name]) VALUES (0, 'Default', 'Regular');
SET IDENTITY_INSERT [dbo].[Foo] OFF;

那么我必须执行

DBCC CHECKIDENT ('Foo', RESEED, 0);

让所有后续插入从 1 开始

【问题讨论】:

    标签: sql sql-server database tsql


    【解决方案1】:

    本,

    据我了解,您希望标识列以 0 而不是 1 开头?

    如果这是你想要的,你必须改变初始种子 IDENTITY(seed, increment)

    将创建表更改为:

    [Id] [int] IDENTITY(0,1) NOT NULL,

    【讨论】:

      【解决方案2】: