我需要创建一个表变量,其标识种子以另一个表中字段的最大值开头?
我试过这个:
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 (....)- 但它似乎不适用于表变量:-(
对不起,看来你不能用表变量做这个.....
我最终做了以下事情:
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)
谢谢
| 归档时间: |
|
| 查看次数: |
16114 次 |
| 最近记录: |