[英]How to change programmatically non-identity column to identity one?
我有一個列ID的表,它是一個標識符。 接下來,我創建新的非標識列new_ID,並使用ID列+ 1中的值更新它。像這樣:
new_ID = ID + 1
接下來,我刪除ID列並將new_ID重命名為name'ID'。
如何在這個新列“ID”上設置標識?
我想以編程方式執行此操作!
據我所知,您必須創建一個臨時表,其ID字段創建為IDENTITY,然后從原始表復制所有數據。 最后,刪除原始表並重命名臨時表。 這是一個表(名為TestTable )的示例,該表只包含一個字段,稱為ID(整數,非IDENTITY):
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_TestTable
(
ID int NOT NULL IDENTITY (1, 1)
) ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_TestTable ON
GO
IF EXISTS(SELECT * FROM dbo.TestTable)
EXEC('INSERT INTO dbo.Tmp_TestTable (ID)
SELECT ID FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_TestTable OFF
GO
DROP TABLE dbo.TestTable
GO
EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT'
GO
COMMIT
看起來SQL Mobile支持更改列標識但SQL Server 2005不喜歡BOL中的示例。
因此,您可以選擇使用標識列創建新的臨時表,然后打開標識插入:
Create Table Tmp_MyTable ( Id int identity....)
SET IDENTITY_INSERT dbo.Tmp_Category ON
INSERT Into Tmp_MyTable (...)
Select From MyTable ....
Drop Table myTable
EXECUTE sp_rename N'dbo.Tmp_MyTable', N'MyTable', 'OBJECT'
此外,您可以嘗試首先將列添加為標識列,然后打開標識插入。 然后刪除原始列。 但我不確定這是否有效。
猜猜你的任務運氣不好....
在表設計中,您應該能夠進入屬性並在Identity Specification change(Is Identity)下更改為Yes,並且如果以前擁有主鍵,則分配列主鍵。
來自SqlServerCentral.com
Identity是在創建表或在alter table語句中添加新列時設置的屬性。 您無法更改列並將其設置為標識,並且在同一個表中不可能有兩個標識列。
根據表的大小,是否可以簡單地創建一個新表? 復制舊模式的模式,然后使用SET IDENTITY_INSERT ON將新標識列填充到舊標識列中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.