我需要创建一个表变量,其标识种子以另一个表中字段的最大值开头?
我试过这个:
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列,并使用identity列和@IdentitySeed的总和来更新它,但是我希望找到一种方法,在没有更新的情况下执行此操作。
答案 0 :(得分:8)
您可以使用以下方法检查IDENTITY列的当前值:
DBCC CHECKIDENT (#HH)
您也可以稍后使用以下内容进行更改:
DBCC CHECKIDENT (#HH, RESEED, 42)
并且它也适用于新值的变量:
DBCC CHECKIDENT (#HH, RESEED, @IdentitySeed)
它适用于本地和全局临时表(即CREATE TABLE #HH (...)
或CREATE TABLE ##HH (....)
- 但它似乎不适用于表变量: - (
抱歉,您似乎无法使用表变量.....
答案 1 :(得分:3)
我相信你可以做到这一点,但它必须在动态SQL中完成 - 在动态SQL中声明tableVar并在那里使用它!
如果您从1开始并且具有计算为MAX(HHRecId)+ ID的辅助ID字段,那肯定会更容易并且会产生更快的代码。
答案 2 :(得分:2)
我最终做了以下事情:
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'
谢谢