是否可以像在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中字段的自动增量值吗?
答案 0 :(得分:9)
答案 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