以编程方式在表变量中设置标识种子

TGn*_*nat 6 sql-server

我需要创建一个表变量,其标识种子以另一个表中字段的最大值开头?

我试过这个:

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)
    )
Run Code Online (Sandbox Code Playgroud)

但是这会产生语法错误.

现在,我已经在表变量中添加了另一个int列,并使用identity列和@IdentitySeed的总和来更新它,但是我想找到一种方法来做到这一点而不进行更新.

mar*_*c_s 10

您可以使用以下方法检查IDENTITY列的当前值:

DBCC CHECKIDENT (#HH)
Run Code Online (Sandbox Code Playgroud)

您也可以稍后使用以下内容进行更改:

DBCC CHECKIDENT (#HH, RESEED, 42)
Run Code Online (Sandbox Code Playgroud)

这也适用于新值的变量:

DBCC CHECKIDENT (#HH, RESEED, @IdentitySeed)
Run Code Online (Sandbox Code Playgroud)

它适用于本地和全局临时表(即 CREATE TABLE #HH (...)CREATE TABLE ##HH (....)- 但它似乎不适用于表变量:-(

对不起,看来你不能用表变量做这个.....


Gab*_*l G 5

我最终做了以下事情:

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'
Run Code Online (Sandbox Code Playgroud)

谢谢