Tablodaki Mevcut Kolona Identity Özelliği Set Etmek

Bu makaleyi okumadan önce tabloda identitiy özelliğinin ne olduğunu anlamak için “Identitiy column ve manual olarak bu kolona insert yapmak(Identitiy insert)” isimli makalemi okumanızı tavsiye ederim.

 

Bazen tablolarımızda başlangıçta identitiy özelliği set edilmemiş ve sonradan bu özelliğin set edilme ihtiyacı ortaya çıkmış olabilir. Bu makalede tablodaki mevcut bir kolona identitiy özelliği nasıl set edilir bundan bahsedeceğiz.

 

Bu işlemi iki yöntemle yapabilirsiniz.

 

  1. Identitity özelliği olan yeni bir tablo oluşturup mevcut kayıtları bu yeni tabloya aktarmak
  2. Tabloya identity özelliği olan yeni bir kolon ekleyip eski kolonu silmek

 

Öncelikle aşağıdaki script yardımıyla ID ve AdSoyad kolonlarından oluşan ve identity özelliği set edilmemiş bir tablo oluşturalım ve bu tabloya birkaç kayıt girelim.

 

CREATE TABLE [dbo].[IdentitiyOrnekTablo](
[ID] [int] NULL,
[AdSoyad] [varchar](250) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[IdentitiyOrnekTablo]([ID],[AdSoyad])VALUES (1,'Nurullah ÇAKIR')
INSERT INTO [dbo].[IdentitiyOrnekTablo]([ID],[AdSoyad])VALUES (3,'Faruk ERDEM')
INSERT INTO [dbo].[IdentitiyOrnekTablo]([ID],[AdSoyad])VALUES (2,'Hakan GÜRBAŞLAR')

 

 

 

Yukarda bahsettiğimiz iki madde ile örnek tablomuz üzerinde bu işlemi gerçekleştirelim.

 

1) Identitity özelliği olan yeni bir tablo oluşturup mevcut kayıtları bu yeni tabloya aktarmak:

 

Tablo üzerine sağ tıklayıp aşağıdaki gibi design diyoruz.

 

 

Açılan ekranda Identity özelliği set etmek istediğimiz kolona tıklayarak aşağıdaki kısımdan Identity Specification’ın ağaç yapısını açıyoruz ve Is Identity kısmında No gördüğünüz yere çift tıklıyoruz ve aşağıdaki ekranda gördüğünüz gibi değerler değişiyor.

 

 

Daha sonra aşağıdaki ekranda işaretlenmiş kutucağa tıklayarak yapılan işlemlerin script’ini alıyoruz.

 

 

Karşımıza aşağıdaki gibi bir script çıkıyor.

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_IdentitiyOrnekTablo
(
ID int NOT NULL IDENTITY (1, 1),
AdSoyad varchar(250) NULL
)  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_IdentitiyOrnekTablo SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_IdentitiyOrnekTablo ON
GO
IF EXISTS(SELECT * FROM dbo.IdentitiyOrnekTablo)
 EXEC('INSERT INTO dbo.Tmp_IdentitiyOrnekTablo (ID, AdSoyad)
SELECT ID, AdSoyad FROM dbo.IdentitiyOrnekTablo WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_IdentitiyOrnekTablo OFF
GO
DROP TABLE dbo.IdentitiyOrnekTablo
GO
EXECUTE sp_rename N'dbo.Tmp_IdentitiyOrnekTablo', N'IdentitiyOrnekTablo', 'OBJECT'
GO
COMMIT

Bu scrit’te gördüğünüz gibi yeni bir tablo oluşturuyor, mevcut tablodaki kayıtları yeni tabloya aktarıyor ve eski tabloyu silerek yeni oluşturduğu tablonun ismini değiştiriyor.

 

Eğer tablonuz büyükse bu işlem uzun sürecektir ve bu işlem sürdüğü sürece sisteminiz çalışmayacaktır ama mevcut ID değerlerinizin korunmasın gerekiyorsa işinize yarayacak tek yöntem budur.

 

2)Tabloya identity özelliği olan yeni bir kolon ekleyip eski kolonu silmek:

 

Aşağıdaki script yardımıyla identity yapmak istediğiniz mevcut kolonu silip, tabloya identity özelliği olan yeni bir kolon ekleyebilirsiniz. Ama bu şekilde mevcut ID kolonunuzun değerleri silinip sıfırdan yeniden verilecektir. Eğer ID kolonundaki mevcut değerlerin silinmemesini istiyorsanız 1.yöntemi kullanmanızı tavsiye ederim. Ekstra bir bilgi olarak 2. yöntem, 1.yöntem’e göre çok daha hızlı bir şekilde tamamlanacaktır.

 

ALTER TABLE dbo.IdentitiyOrnekTablo DROP COLUMN ID
ALTER TABLE [dbo].[IdentitiyOrnekTablo] ADD ID INT IDENTITY (1, 1) NOT NULL;

 

Loading

Leave Your Comment