我有一個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. TSQL標誌具有唯一唯一標識的重複記錄
- 5. 從FitNesse中的單一標識列表獲取標識值
- 6. 變量的唯一標識(如spl_object_hash)
- 7. 在mysql中重新排序/重置列唯一標識
- 8. 在列表中獲取唯一標識
- 9. 批量插入到SQL表中,並使用唯一標識列不是標識
- 10. Python中兩個列表的交叉標識(重疊)通過公共標識符
- 11. 不止一個標識列
- 12. 給組的行唯一標識符TSQL
- 13. 如何從表中刪除標識列
- 14. 從另一個表和標識列
- 15. 在表格變量中不允許插入標識列
- 16. jQuery動態標識符重新排列
- 17. 重新編號的標識列
- 18. 如何在表中標識列時執行批量插入
- 19. 如何更新標識列值
- 20. 如何作弊更新標識列?
- 21. 標識列增量跳轉
- 22. 標識增量
- 23. 如何重新組織SQL Server 2008中的標識列值
- 24. 更新標識列sql
- 25. 在json數組中使用一個變量作爲標識符
- 26. 如何得到下一個標識不是最後插入的標識列的標識
- 27. 如何在lambda中創建標識列?
- 28. 如何在Linq2SQL中指定標識列
- 29. 如何創建標識列
- 30. 更新用戶列表.net標識usermanager
很酷,我從來不知道那個DBCC命令。謝謝! – 2008-09-29 02:13:48
不能對錶變量進行TRUNCATE,也不能在表變量上使用DBCC CHECKIDENT。 – AndrewJacksonZA 2011-12-02 07:11:18