Программно установить начальное значение идентификатора в табличной переменной - PullRequest
5 голосов
/ 26 августа 2009

Мне нужно создать переменную таблицы с начальным числом идентификаторов, которое начинается с максимального значения поля в другой таблице?

Я пробовал это:

DECLARE @IdentitySeed int

SET @IdentitySeed = (SELECT MAX(HHRecId) +1 FROM xxx )

DECLARE @HH TABLE (
    HHId INT IDENTITY(@IdentitySeed,1)
    ,AddressType CHAR(1)
    ,Address1 VARCHAR(100)
    ,City VARCHAR(50)
    ,State VARCHAR(2)
    ,Zip VARCHAR(5)
    ,LastName VARCHAR(50)
    )

Но это дает синтаксическую ошибку.

Сейчас я добавил еще один столбец int в переменную таблицы и обновил его суммой столбца идентификации и @IdentitySeed, но я хотел бы найти способ сделать это без обновления.

Ответы [ 3 ]

9 голосов
/ 26 августа 2009

Вы можете проверить текущее значение столбца IDENTITY, используя:

DBCC CHECKIDENT (#HH)

, и вы также можете изменить это позже, используя:

DBCC CHECKIDENT (#HH, RESEED, 42)

и это также работает с переменной для нового значения:

DBCC CHECKIDENT (#HH, RESEED, @IdentitySeed)

Это работает для локальных и глобальных временных таблиц (т.е. CREATE TABLE #HH (...) или CREATE TABLE ##HH (....) - но, похоже, не работает с табличными переменными: - (

Извините, похоже, вы не можете сделать это с табличными переменными .....

4 голосов
/ 27 февраля 2014

Я закончил тем, что сделал следующее:

DECLARE @NewId INT

SELECT @NewId = MAX(ID) FROM MyIDSTable

DECLARE @MyTempData TABLE (
    Id int not null primary key
    ,Field1 int not null
    ,Field2 nvarchar(25) not null
    ,Field3 datetime
)

INSERT INTO @MyTempData
SELECT  ROW_NUMBER() OVER ( Order by [C].[Cancel_id] ASC) + @NewId -1 [RowNum]
        ,Field1
        ,Field2
        ,Field3

INSERT INTO MyTable SELECT * FROM @MyTempData

UPDATE MYIDSTable SET ID = (SELECT MAX(ID) FROM @MyTempData) + 1 WHERE Name = 'Something'

Спасибо

3 голосов
/ 26 августа 2009

Я полагаю, что вы можете сделать это, но это должно быть сделано в динамическом SQL - объявите tableVar в динамическом SQL и используйте его там же!

Конечно, было бы проще и быстрее получить код, если бы вы запустили его с 1 и имели поле вторичного идентификатора, которое рассчитывается как MAX (HHRecId) + ID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...