无论如何重置表变量的身份?

Vac*_*ano 15 t-sql sql-server sql-server-2008

假设我有一个表变量:

DECLARE @MyTableVar TABLE (ID INT IDENTITY(1,1), SomeData NVARCHAR(300))
Run Code Online (Sandbox Code Playgroud)

插入250行后,我需要使用表格"重新开始".我这样做:

DELETE FROM @MyTableVar
Run Code Online (Sandbox Code Playgroud)

我可以对table变量做什么,以便:

insert into @MyTableVar Values("TestData")
select * from @MyTableVar
Run Code Online (Sandbox Code Playgroud)

将返回此:

_______________________________
|    ID     |    SomeData     |
|___________|_________________|
|           |                 |   
|     1     |    TestData     |        
|___________|_________________|

而不是这个:

_______________________________
|    ID     |    SomeData     |
|___________|_________________|
|           |                 |   
|    251    |    TestData     |        
|___________|_________________|

Tho*_*mas 15

相反,依赖于身份,为什么不使用新的排名功能,如Row_Number

Insert @MyTableVar( Id, Value )
Select Row_Number() Over ( Order By Value )
    , Value
From SomeOtherTable
Run Code Online (Sandbox Code Playgroud)


Aar*_*and 5

与其重新播种 IDENTITY,为什么不直接从 @table 变量中删除,然后对输入使用 ROW_NUMBER() 呢?例如,而不是懒惰

SELECT * FROM @MyTableVar;
Run Code Online (Sandbox Code Playgroud)

...用...

SELECT ID = ROW_NUMBER() OVER (ORDER BY ID), SomeData FROM @MyTableVar;
Run Code Online (Sandbox Code Playgroud)

现在你不需要关心种子是什么,它是否从 1 开始,是否有任何间隙等等。