在SQL Server中,如何将自动增量字段的下一个值设置为任意值,就像在Postgres中一样?

时间:2011-11-10 18:31:50

标签: sql-server postgresql auto-increment

是否可以像在Postgres中那样在SQL Server中设置autoincrement字段的下一个值?

对于好奇,这是整个背景故事。我的公司曾经使用Postgres,它允许您轻松地将自动增量字段的下一个值设置为任意值。

新公司收购了旧公司,现在我们将Postgres数据导入SQL Server。不知何故,帐户上的自动增量AcctID字段设置为9位数字,即使有数千个8位数字。显然有人在Postgres做了一段时间,因为一些现在不为人知的原因。

所以现在在新的SQL Server数据库中,新帐户有9位帐户ID,但客户的会计软件无法处理9位帐号,因此他们添加的任何新帐户都无法处理他们的会计部门直到这个问题得到解决。

当然,最多有72个不同的表可以依赖于AcctID的{​​{1}}字段,并且客户端在意识到所涉及的问题之前创建了大约360个新帐户,因此保存数据,截断表和重新插入数据将是一项繁重的任务。

更好的是将Accounts的自动增量值设置为最后的8位数值+ 1.然后至少他们能够添加新帐户,而9位数帐户的解决方案是正在努力。事实上,他们声称他们只需要他们添加的360个帐户中的3个。

那么可以像在Postgres中那样重置SQL Server中字段的自动增量值吗?

2 个答案:

答案 0 :(得分:9)

在SQL Server中,您可以重置自动增量列,如下所示:

dbcc checkident ( table_name, RESEED, new_value )

您可以查看MSDN的相关文档here

答案 1 :(得分:1)

您也可以这样做:

CREATE TABLE #myTable
    (
      ID INT IDENTITY,
      abc VARCHAR(20)
    )

INSERT  INTO #myTable
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'cba'

SELECT  *
FROM    #myTable 

-- Jump Identities
SET IDENTITY_INSERT #myTable  ON
INSERT  INTO #myTable
        ( id, abc )
VALUES  ( 50, 'cbd' )

SELECT  *
FROM    #myTable 
SET IDENTITY_INSERT #myTable  OFF

-- Back to contigious
INSERT  INTO #myTable
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'abc'
        UNION ALL
        SELECT  'cba'

SELECT  *
FROM    #myTable 
DROP TABLE #myTable