簡體   English   中英

如何以編程方式將非標識列更改為標識列?

[英]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,並且如果以前擁有主鍵,則分配列主鍵。

Identity是在創建表或在alter table語句中添加新列時設置的屬性。 您無法更改列並將其設置為標識,並且在同一個表中不可能有兩個標識列。

根據表的大小,是否可以簡單地創建一個新表? 復制舊模式的模式,然后使用SET IDENTITY_INSERT ON將新標識列填充到舊標識列中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM