如何在SQL Server中将表重新种子设定为0?

如何在SQL Server中将表重新种子设定为0?,sql,sql-server,identity-column,Sql,Sql Server,Identity Column,这不起作用: DBCC CHECKIDENT('[DMS].[dbo].[ImportedFiles]', RESEED, 0) 一旦插入下一条记录,我希望种子为0而不是1 我尝试了这个,但函数不喜欢它: DBCC CHECKIDENT('[DMS].[dbo].[ImportedFiles]', RESEED, -1) DBCC CHECKIDENT('[DMS].[dbo].[ImportedFiles]', RESEED, '-1') 如何重置表的种子,使进入的下一条记录为零?0?如

这不起作用:

DBCC CHECKIDENT('[DMS].[dbo].[ImportedFiles]', RESEED, 0)
一旦插入下一条记录,我希望种子为0而不是1

我尝试了这个,但函数不喜欢它:

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

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

如何重置表的种子,使进入的下一条记录为零?0?

如果标识列定义为0,1,并且表为空,并且没有涉及外键,只需发出:

TRUNCATE TABLE dbo.ImportedFiles;
如果表中有外键,或者在任何情况下,您都可以覆盖该值:

SET IDENTITY_INSERT dbo.ImportedFiles ON;
INSERT dbo.ImportedFiles(col1, col2) SELECT 0, 'UNKNOWN';
SET IDENTITY_INSERT dbo.ImportedFiles OFF;

我已经确认,使用-1重新设置种子也会产生下一个插入值0。因此,我不确定您使用的是什么版本,而这不起作用,我不知道如何解释。我不喜欢它。

我无法复制此。。。下面是一个有效的测试,SQL Server 2012。2008 R2

还有,@任何人说0意味着什么,其实不是。虽然很常见的情况是0值被用作未知数等,但围绕标识列构建的业务逻辑是一种反模式,通常应该避免,绝对不推荐使用

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;

@ebyrob为什么0应该无效?如果我从-10开始,SQL Server到达该位置时是否应跳过0?一般来说,第0条记录通常是一条特殊的记录,表示非值。在我希望为此目的有第0条记录的情况下,我通过启用标识插入来手动插入,然后再次将其关闭。@ebyrob您不应该在不知道SQL Server中是否也存在这些问题的情况下推断MySQL中标识列的问题我的哥哥被MySQL中的零杀死了这到底意味着什么?你收到错误信息了吗?如果是这样的话,你能告诉我们,不是你对函数感觉如何的简要说明吗?虽然通常会看到0值被用作未知值之类的东西,但围绕标识列构建的业务逻辑是一种反模式。这我试图打破一个大客户机的这种习惯,软件和数据库人员习惯性地认为ID为0在没有任何测试或分析的情况下是无效的。当相关的bug出现时,这是非常困难和令人沮丧的,他们的反应是不应该使用0作为ID。@ebyrob什么?无论哪种方式,我都没有对此发表任何评论,我所做的只是评论了Avarkx关于自动将零值ID作为特例处理的评论的相关性。在SQL Server/.Net世界中,这是一个令人讨厌的、不幸的普遍现象,或者我只是需要更好的客户端?反模式。@ebyrob如果您依赖于其中a.FK=1,而不是仅仅进行正确的连接,并且其中a.Code='UNKNOWN'等效,那么我希望这样的完全重建会更加困难。。。