我有一個名為Person的表,這個表是不空的,它充滿了記錄(超過1000行)
我怎樣才能重置這個表的身份種子呢?
| Id | 個人姓名 |
|---|---|
| 154 |
查詢已被執行,但表仍有身份
查詢已被執行,但表仍有身份
使用 [MyDatabase]
DBCC CHECKIDENT ('dbo.Person'/span>, RESEED, 0)
去
執行前面的查詢后,表的預期結果 :
| Id | 個人姓名 |
|---|---|
| 1 |
uj5u.com熱心網友回復:
問題在于你的理解;代碼很可能在完全地作業,就像它應該做的那樣,而且正如我所展示的。RESEED resets next IDENTITY生成的值,它沒有改變any現有的值。
采取與我在評論中給出的類似的 SQL:
。CREATE TABLE dbo. Person (ID int IDENTITY(1, 1), AbligatoryColumn char(1))。)
呼叫
WITH N AS(
SELECT N
FROM (VALUES(NULL), (NULL),(NULL),(NULL) 。 (NULL),(NULL),(NULL)。 (NULL),(NULL),(NULL))N(N))。
統計 AS(
SELECT N1.N
FROM N N1, N N2, N N3)
INSERT INTO dbo.Person (AbligatoryColumn)
SELECT 'a'
FROM Tally;
歸
SELECT TOP (5) *
FROM dbo.Person
ORDER BY ID ASC;
如果你運行這個,你會得到以下的結果:
ID AbligatoryColumn
----------- ----------------
1 a
2 a
3 a
4 a
5 a
現在,讓我們重新編輯該表,并插入另一行:
DBCC CHECKIDENT ('dbo.Person'/span>, RESEED, 0)
去
INSERT INTO dbo.Person
DEFAULT VALUES;
歸
SELECT TOP (5) *
FROM dbo.Person
ORDER BY ID ASC;
這就得到了以下資料集:
這就得到了以下資料集。
ID AbligatoryColumn
----------- ----------------
1 a
1 NULL
2 a
3 a
4 a
請注意,有2行的ID的值是1。這是因為我們插入的新行使用了新的種子,所以產生的下一個值是1(因為當你RESEED時,你是在定義最后使用的值,而不是下一個要使用的值)。
注意,你不能UPDATE一個IDENTITY的值,所以如果我們嘗試下面的方法,你會得到一個錯誤:
UPDATE dbo.Person
SET ID = ID 1000
WHERE AbligatoryColumn = 'a'/span>;
不能更新身份列'ID'。
真正的問題為什么你想改變這個值?一個IDENTITY只是一個任意的值,它的值并不重要。
如果你 "必須 "改變它的值,那么你就必須改變它。
如果你 "必須"(我建議你不需要),你將需要CREATE一個新的表,INSERT你現有的表的資料到它(可能啟用了IDENTITY_INSERT),然后DROP你的舊表,并重新命名新表。如果你有任何指向當前表的外鍵約束,你將需要DROP 所有這些,我真的希望你有任何參考現有ID值的資料,因為你將需要更新所有的外鍵值before你重新創建外鍵約束。因此,你的新表將(盡管可能是暫時的)需要在不同的列中擁有新舊 PK 值。
因此,事實上,讓它保持現狀;IDENTITY的值實際上并不重要。它是一個任意的值,無論第一個值是從1、17還是167開始,或者是否有數字 "丟失",都與IDENTITY所要實作的功能無關;一個總是上升的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311042.html
標籤:
上一篇:一些錯誤,而提交的形式與空欄位在PHP,Codeigniter的
下一篇:如何為同一表中的某一列做外鍵參考
