如何在SQL Server中将表重新播种为0?

RJ.*_*RJ. -1 sql sql-server identity-column

这不起作用:

DBCC CHECKIDENT('[DMS].[dbo].[ImportedFiles]', RESEED, 0)
Run Code Online (Sandbox Code Playgroud)

插入下一条记录后,我希望种子为0而不是1.

我试过这个,但功能不喜欢它:

DBCC CHECKIDENT('[DMS].[dbo].[ImportedFiles]', RESEED, -1)

DBCC CHECKIDENT('[DMS].[dbo].[ImportedFiles]', RESEED, '-1')
Run Code Online (Sandbox Code Playgroud)

如何重置表的种子,以便下一个记录是零?(0)?

Aar*_*and 6

如果IDENTITY列定义为(0,1),并且表为空,并且没有涉及外键,则只发出:

TRUNCATE TABLE dbo.ImportedFiles;
Run Code Online (Sandbox Code Playgroud)

如果表具有外键 - 或者在任何情况下,就此而言 - 您可以覆盖该值:

SET IDENTITY_INSERT dbo.ImportedFiles ON;
INSERT dbo.ImportedFiles(col1, col2) SELECT 0, 'UNKNOWN';
SET IDENTITY_INSERT dbo.ImportedFiles OFF;
Run Code Online (Sandbox Code Playgroud)

我已经确认@ Avarkx的答案也有效 - 用-1重新设定应该产生0的下一个插入.所以我不确定你使用的是哪个版本不起作用(我不知道如何解释"不不喜欢它).


Ava*_*rkx 5

我无法复制这个...这是一个有效的测试,Sql Server 2012R2.2008 R2.

另外,@ Anybody说0意味着什么,它确实没有.虽然看到0值被用作未知数等是相当普遍的,但围绕IDENTITY列构建的业务逻辑是一种反模式,通常应该避免,绝对不会推荐.

CREATE TABLE dbo.Foo
(
    Foo_PK BIGINT IDENTITY( 1, 1 ) NOT NULL,
    Bar BIT
);

INSERT INTO dbo.Foo (Bar)
    SELECT b.Bar
    FROM 
        (SELECT Bar = NULL
         UNION ALL  
         SELECT Bar = 1
         UNION ALL  
         SELECT Bar = 0) b;

SELECT *
FROM dbo.Foo;

DBCC CHECKIDENT ('dbo.Foo', RESEED, -1);

INSERT INTO dbo.Foo (Bar)
    SELECT  b.Bar
    FROM 
        (SELECT Bar = NULL
         UNION ALL  
         SELECT Bar = 1
         UNION ALL  
         SELECT Bar = 0) b;

SELECT *
FROM dbo.Foo;
GO

DROP TABLE dbo.Foo;
Run Code Online (Sandbox Code Playgroud)