1
A
回答
3
您的表必須從頭開始重建,這是不可能的AUTO_INCREMENT分配給現有的表。試試這個腳本,它將使用auto_increment爲你建立一個表格,將舊錶格中的所有數據傳輸到新表格,刪除舊錶格並將新表格重新命名爲舊錶格。
只要確保您的數據與auto_increment屬性兼容!
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_schema_version
(
version int NULL,
datetime datetime NULL,
comments nvarchar(150) NULL,
id int NOT NULL IDENTITY (1, 1)
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_schema_version SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_schema_version ON
GO
IF EXISTS(SELECT * FROM dbo.schema_version)
EXEC('INSERT INTO dbo.Tmp_schema_version (version, datetime, comments, id)
SELECT version, datetime, comments, id FROM dbo.schema_version WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_schema_version OFF
GO
DROP TABLE dbo.schema_version
GO
EXECUTE sp_rename N'dbo.Tmp_schema_version', N'schema_version', 'OBJECT'
GO
ALTER TABLE dbo.schema_version ADD CONSTRAINT
PK_schema_version PRIMARY KEY CLUSTERED
(
id
) WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
COMMIT
+0
謝謝你的幫助...反正沒有足夠的數據...所以我放棄了桌子並用身份(1,1)主鍵重新創建... tc .. – Mahib
0
這與@Dieter Gobeyn的解決方案几乎類似,我後面跟着。
創建具有自動遞增的臨時表上
CREATE TABLE [dbo].[schema_version_new](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Version] [int] NULL,
[DateTime] [datetime] NULL,
[Comments] [nvarchar](150) NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)
) ON [PRIMARY]
GO
複製一切從舊錶到新創建的一個;我們從舊錶中故意留下了ID,並且我們在新表上放置了自動增量ID,因此不需要將ID放在那裏。如果我們需要保留舊錶的ID,那麼我們需要「SET IDENTITY_INSERT dbo.schema_version_new OFF
」,在插入行時包含ID,插入後我們再次將identity_insert變爲「SET IDENTITY_INSERT dbo.schema_version_new ON
」。對於新的插入它會得到自動ID。
INSERT INTO [schema_version_new]([Version], [Datetime], [Comments])
SELECT [Version], [Datetime], [Comments] FROM [schema_version]
丟掉舊桌子。
DROP TABLE [dbo].[schema_version]
GO
將新表重命名爲舊錶的名稱。
EXECUTE sp_rename N'dbo.schema_version_new', N'schema_version', 'OBJECT'
GO
相關問題
- 1. 如何在PostgreSQL中將自動遞增主鍵添加到現有表中?
- 2. 現有表中添加自動遞增的主鍵 - SQL
- 3. SQL Server將自動增加主鍵添加到現有表
- 4. 如何增加「主鍵」自動增加數量?
- 5. 如何在hibernate中自動增加非主鍵列?
- 6. 如何在Mysql中自動增加主鍵值
- 7. 如何在c#中添加自動增量和主鍵#
- 8. 在mysql中添加具有自動增量的主鍵
- 9. 如何使用自動增加的主鍵作爲外鍵?
- 10. 如何創建自動增量主鍵?
- 11. oracle自動增加到主鍵
- 12. 自動增加複合主鍵
- 13. 自動增加主鍵(MySQL)的問題
- 14. 的SQLite自動增加非主鍵
- 15. 如何在MySql中不使用自動增量來增加主鍵
- 16. 如何自動增加JDBC中的主鍵sql
- 17. 如何避免主鍵在插入查詢時自動增加?
- 18. 自動增量主鍵
- 19. 主鍵自動增量
- 20. 自動遞增列主鍵
- 21. 如何查找所有沒有自動增量的主鍵
- 22. 如何添加主鍵值自動增加到另一列在PHP中?
- 23. 插入自動增量主鍵到現有表
- 24. 如何使MySQL表的主鍵自動增加一些前綴
- 25. 如何啓用PowerDesigner 16.5自動增加MySQL數據庫主鍵?
- 26. 如何根據列的順序添加自動增量主鍵?
- 27. 如何重新分配自動增加主鍵值?
- 28. 如何在MongoDB中使用自動增量設置主鍵?
- 29. 如何在SQLite中創建自動增量主鍵
- 30. 如何在varchar中生成自動增量主鍵
是當前id列中所有值都是唯一的嗎? – paqogomez
你確定了答案嗎?你還需要知道更多嗎? – paqogomez