我有一個T-SQL 表變量(不是表),它有一個自動遞增標識列。我想清除此變量的所有數據並將標識列值重置爲1.這怎麼辦?如何在T-SQL表變量中重新標識一個標識列?
回答
如果您使用的是表變量,你不能做到這一點。如果它是一張桌子,你可以截斷它或使用DBCC CHECKIDENT
。但是,如果的使用表變量,則必須使用標識列以外的內容。或者,更準確地說,在表變量,但使用ROWNUMBER
輸出使用標識列:
DECLARE @t table (pkint int IDENTITY(1,1), somevalue nvarchar(50))
INSERT INTO @t (somevalue) VALUES('one')
INSERT INTO @t (somevalue) VALUES('twp')
INSERT INTO @t (somevalue) VALUES('three')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t
DELETE FROM @t
INSERT INTO @t (somevalue) VALUES('four')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t
這是你可以用表變量做到最好。
截斷表將轉儲所有數據,並重置身份種子。
否則,你可以使用這個調用重置身份,同時保留任何數據:
DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue)
如果您需要在while循環的每個回合中截斷表變量,則可以將declare @myTbl (...)
語句放入循環中。這將重新創建表並在循環的每一回閤中重置標識列。然而,它有一個沉重的表現。我有一個相當緊的循環,並且相對於delete @myTbl
重新聲明表變量要慢幾倍。
- 丹
declare @tb table (recid int,lineof int identity(1,1))
insert into @tb(recid)
select recid from tabledata
delete from @tb where lineof>(select min(lineof) from @tb)[email protected]
我這樣做時,我想使用SQL 2000的時候基本上,你在添加記錄,然後看看最小的一個使用TOP和變量。我有同樣的問題,並注意到這個線程。刪除表不會重置種子,儘管我想象使用GO應該刪除表和變量來重置種子。
@maxlimit在上面的查詢中是爲了獲得查詢的前900個,並且由於表變量將具有不同的起始身份密鑰,所以這將解決該問題。
任何後續查詢可以減去衍生過程,使其插入爲「1」,等等。
希望它能幫助。
Lauren
我建議你使用兩個表變量。 @ Table1在第一列上有一個標識種子。 @表2具有相同的第一列,但沒有身份種子。
當你遍歷的過程中,
Insert into @Table2 from @Table1
然後刪除兩個表中爲你處理循環。
在你第一遍時,@表2將在第一行AA序列號從1開始。
通過循環的第二次你的第二個表可能有在第一列序列號開始說1081 。但是,如果你選擇的最小值爲變量
(Select @FixSeed = min(RowID) From @Table2)
然後你就可以更新@表2,使行ID從1開始,如下:
Update @Table2 Set RowID = RowID - @FixSeed +1
希望這有助於
如果您已刪除表中的所有行,並且您想要重置標識列值。
使用DBCC CHECKIDENT命令。
DBCC CHECKIDENT(tblPerson, RESEED, 0)
此命令將重置PersonId標識列。
需要注意的另一件事是,如果您使用完整路徑引用或者您的表名中包含空格,則可能需要將表名稱用單引號或方括號括起來。
DBCC CHECKIDENT (‘databasename.dbo.orders’,RESEED, 0)
- 1. 如何使用變量在C#中標識另一個變量?
- 2. 在TSQL中增加唯一標識符
- 3. PHP:標識一類變量
- 4. 在mysql中重新排序/重置列唯一標識
- 5. 如何從表中刪除標識列
- 6. 從另一個表和標識列
- 7. jQuery動態標識符重新排列
- 8. 重新編號的標識列
- 9. 如何作弊更新標識列?
- 10. 標識增量
- 11. 如何在Linq2SQL中指定標識列
- 12. 如何刪除插入表中標識列的重複值?
- 13. RESEED標識列
- 14. 標識列
- 15. python列表重複標識並分配一個值
- 16. 我如何計算列表中標識元素的數量?
- 17. 如何唯一標識一個網絡?
- 18. 變量標識中的冒號
- 19. 標識符中的Netezza變量
- 20. C中的標識符和變量
- 21. 插入標識表列值
- 22. 檢索標識列表
- 23. RadSpreadsheet - 給列一個唯一的標識
- 24. 如何添加一個id列來標識read_html()表?
- 25. 如何識別重新定義的變量或陰影變量
- 26. 如何識別表是否具有標識列
- 27. 標識符表
- 28. 如何在SQL Server中重置增量標識的起始值
- 29. 唯一標識一個NSScreen
- 30. 標識被改變
很酷,我從來不知道那個DBCC命令。謝謝! – 2008-09-29 02:13:48
不能對錶變量進行TRUNCATE,也不能在表變量上使用DBCC CHECKIDENT。 – AndrewJacksonZA 2011-12-02 07:11:18