В SQL Server, как мне установить следующее значение для поля автоинкремента на произвольное значение, как вы можете в Postgres? - PullRequest
2 голосов
/ 10 ноября 2011

Можно ли установить следующее значение поля autoincrement в SQL Server, как вы можете сделать в Postgres?

Для любопытных, вот вся предыстория.Моя компания использовала Postgres, что позволяет легко устанавливать для следующего значения поля автоинкремента произвольное значение.

Новая компания купила старую компанию, и теперь мы импортируем данные Postgres в SQL Server.Каким-то образом автоинкрементное поле AcctID в Аккаунтах было установлено на 9-значное число, даже при наличии тысяч 8-значных номеров.Очевидно, кто-то делал это некоторое время назад в Postgres по неизвестной теперь причине.

Так что теперь в новой базе данных SQL Server новые учетные записи имеют 9-значные идентификаторы учетных записей, но программное обеспечение для учета клиента не может иметь дело с9-значные номера счетов, поэтому любые новые учетные записи, которые они добавляют, не могут быть обработаны их бухгалтерией, пока это не будет решено.

Конечно, существует до 72 различных таблиц, которые могут зависеть от AcctID поле Accounts, и клиент создал около 360 новых учетных записей, прежде чем они осознали связанные с этим проблемы, поэтому сохранение этих данных, усечение таблицы и повторная вставка данных были бы обременительной задачей.

Намного лучше было быустановить для автоинкремента значение AcctID до последнего 8-значного значения + 1. Тогда, по крайней мере, они смогут добавлять новые учетные записи, пока решается вопрос с 9-значными учетными записями.Фактически они утверждают, что им нужно только 3 из 360 добавленных ими учетных записей.

Так возможно ли сбросить значение автоинкремента для поля в SQL Server, как это можно сделать в Postgres?

Ответы [ 2 ]

9 голосов
/ 10 ноября 2011

В SQL Server вы можете сбросить столбец автоинкремента следующим образом:

dbcc checkident ( table_name, RESEED, new_value )

Вы можете проверить документацию MSDN об этом здесь .

1 голос
/ 10 ноября 2011

Вы тоже можете сделать это:

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...