IDENTITY (Özellik) (Transact-SQL)

Bir tabloda bir kimlik sütunu oluşturur. Bu özellik CREATE TABLE ve ALTER TABLE Transact-SQL deyimleriyle kullanılır.

[!NOT]

IDENTITY özelliği, bir sütunun kimlik özelliğini dışa açan SQL-DMO Identity özelliğinden farklıdır.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

IDENTITY [ (seed , increment) ]

Bağımsız değişkenler

  • seed
    Tabloya yüklenen ilk satır için kullanılan değerdir.

  • increment
    Yüklenen bir önceki satırın kimlik değerine eklenen artım değeridir.

Hem kök hem de artım değerini belirtmeli veya hiçbirini belirtmemelisiniz. Hiçbiri belirtilmezse, varsayılan değer (1,1) olur.

Açıklamalar

Sık sık silme yapılan bir tabloda bir kimlik sütunu varsa, kimlik değerleri arasında boşluklar oluşabilir. Bu bir sorun oluşturuyorsa, IDENTITY özelliğini kullanmayın. Ancak, boşluk oluşmamasını sağlamak veya var olan boşlukları doldurmak için, SET IDENTITY_INSERT ON olarak açıkça bir tane girmeden önce var olan kimlik değerlerini çağırın.

Kaldırılmış bir kimlik değerini yeniden kullanıyorsanız, kullanılabilen bir sonraki kimlik değerini aramak için Örnek B'deki örnek kodu kullanın. tablename, column_type ve MAX(column_type) - 1 ifadelerini bir tablo adı, kimlik sütunu veri türü ve (o veri türü için) izin verilen en yüksek sayısal değer -1 ile değiştirin.

Geçerli kimlik değerini denetlemek ve kimlik sütunundaki en yüksek değer ile karşılaştırmak için DBCC CHECKIDENT'i kullanın.

Kimlik sütunu olan bir tablo çoğaltma için yayımlanırsa, kimlik değerinin kullanılan çoğaltma türüne uygun olan bir şekilde yönetilmesi gerekir. Daha fazla bilgi için, bkz. Kimlik sütunları çoğaltma.

[!NOT]

Birden çok tabloda kullanılabilecek ve herhangi bir tabloya başvurmadan uygulamalardan çağrılabilecek, otomatik olarak artan bir sayı oluşturma için bkz. Sıra numaraları.

Örnekler

A.IDENTITY özelliğini CREATE TABLE ile kullanma

Aşağıdaki örnek, otomatik olarak artan bir kimlik numarası için IDENTITY özelliğini kullanarak yeni bir tablo oluşturmaktadır.

USE AdventureWorks2012
IF OBJECT_ID ('dbo.new_employees', 'U') IS NOT NULL
   DROP TABLE new_employees;
GO
CREATE TABLE new_employees
(
 id_num int IDENTITY(1,1),
 fname varchar (20),
 minit char(1),
 lname varchar(30)
);

INSERT new_employees
   (fname, minit, lname)
VALUES
   ('Karin', 'F', 'Josephs');

INSERT new_employees
   (fname, minit, lname)
VALUES
   ('Pirkko', 'O', 'Koskitalo');

USE AdventureWorks2012
IF OBJECT_ID ('dbo.new_employees', 'U') IS NOT NULL
   DROP TABLE new_employees;
GO
CREATE TABLE new_employees
(
 id_num int IDENTITY(1,1),
 fname varchar (20),
 minit char(1),
 lname varchar(30)
);

INSERT new_employees
   (fname, minit, lname)
VALUES
   ('Karin', 'F', 'Josephs');

INSERT new_employees
   (fname, minit, lname)
VALUES
   ('Pirkko', 'O', 'Koskitalo');

B.Kimlik değerlerinde boşluklar bulmak için genel amaçlı sözdizimi kullanma

Aşağıdaki örnek, veri çıkarıldığında kimlik değerlerinde oluşan boşlukları bulmak için genel amaçlı sözdizimini göstermektedir.

[!NOT]

Aşağıdaki Transact-SQL komut dizisinin ilk kısmı yalnızca örnek olarak hazırlanmıştır. -- Create the img table yorumu ile başlayan Transact-SQL komut dizisini çalıştırabilirsiniz.

-- Here is the generic syntax for finding identity value gaps in data.
-- The illustrative example starts here.
SET IDENTITY_INSERT tablename ON
DECLARE @minidentval column_type
DECLARE @maxidentval column_type
DECLARE @nextidentval column_type
SELECT @minidentval = MIN($IDENTITY), @maxidentval = MAX($IDENTITY)
    FROM tablename
IF @minidentval = IDENT_SEED('tablename')
   SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('tablename')
   FROM tablename t1
   WHERE $IDENTITY BETWEEN IDENT_SEED('tablename') AND 
      @maxidentval AND
      NOT EXISTS (SELECT * FROM tablename t2
         WHERE t2.$IDENTITY = t1.$IDENTITY + 
            IDENT_INCR('tablename'))
ELSE
   SELECT @nextidentval = IDENT_SEED('tablename')
SET IDENTITY_INSERT tablename OFF
-- Here is an example to find gaps in the actual data.
-- The table is called img and has two columns: the first column 
-- called id_num, which is an increasing identification number, and the 
-- second column called company_name.
-- This is the end of the illustration example.

-- Create the img table.
-- If the img table already exists, drop it.
-- Create the img table.
IF OBJECT_ID ('dbo.img', 'U') IS NOT NULL
   DROP TABLE img
GO
CREATE TABLE img (id_num int IDENTITY(1,1), company_name sysname)
INSERT img(company_name) VALUES ('New Moon Books')
INSERT img(company_name) VALUES ('Lucerne Publishing')
-- SET IDENTITY_INSERT ON and use in img table.
SET IDENTITY_INSERT img ON

DECLARE @minidentval smallint
DECLARE @nextidentval smallint
SELECT @minidentval = MIN($IDENTITY) FROM img
 IF @minidentval = IDENT_SEED('img')
    SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('img')
    FROM img t1
    WHERE $IDENTITY BETWEEN IDENT_SEED('img') AND 32766 AND
      NOT    EXISTS (SELECT * FROM img t2
          WHERE t2.$IDENTITY = t1.$IDENTITY + IDENT_INCR('img'))
 ELSE
    SELECT @nextidentval = IDENT_SEED('img')
SET IDENTITY_INSERT img OFF

-- Here is the generic syntax for finding identity value gaps in data.
-- The illustrative example starts here.
SET IDENTITY_INSERT tablename ON
DECLARE @minidentval column_type
DECLARE @maxidentval column_type
DECLARE @nextidentval column_type
SELECT @minidentval = MIN($IDENTITY), @maxidentval = MAX($IDENTITY)
    FROM tablename
IF @minidentval = IDENT_SEED('tablename')
   SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('tablename')
   FROM tablename t1
   WHERE $IDENTITY BETWEEN IDENT_SEED('tablename') AND 
      @maxidentval AND
      NOT EXISTS (SELECT * FROM tablename t2
         WHERE t2.$IDENTITY = t1.$IDENTITY + 
            IDENT_INCR('tablename'))
ELSE
   SELECT @nextidentval = IDENT_SEED('tablename')
SET IDENTITY_INSERT tablename OFF
-- Here is an example to find gaps in the actual data.
-- The table is called img and has two columns: the first column 
-- called id_num, which is an increasing identification number, and the 
-- second column called company_name.
-- This is the end of the illustration example.

-- Create the img table.
-- If the img table already exists, drop it.
-- Create the img table.
IF OBJECT_ID ('dbo.img', 'U') IS NOT NULL
   DROP TABLE img
GO
CREATE TABLE img (id_num int IDENTITY(1,1), company_name sysname)
INSERT img(company_name) VALUES ('New Moon Books')
INSERT img(company_name) VALUES ('Lucerne Publishing')
-- SET IDENTITY_INSERT ON and use in img table.
SET IDENTITY_INSERT img ON

DECLARE @minidentval smallint
DECLARE @nextidentval smallint
SELECT @minidentval = MIN($IDENTITY) FROM img
 IF @minidentval = IDENT_SEED('img')
    SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('img')
    FROM img t1
    WHERE $IDENTITY BETWEEN IDENT_SEED('img') AND 32766 AND
      NOT    EXISTS (SELECT * FROM img t2
          WHERE t2.$IDENTITY = t1.$IDENTITY + IDENT_INCR('img'))
 ELSE
    SELECT @nextidentval = IDENT_SEED('img')
SET IDENTITY_INSERT img OFF

Ayrıca bkz.

Başvuru

ALTER TABLE (Transact-SQL)

Tablo (Transact-sql) oluştur

DBCC CHECKIDENT (Transact-SQL)

IDENT_INCR (Transact-sql)

@@ IDENTITY (Transact-sql)

IDENTITY (işlev) (Transact-sql)

IDENT_SEED (Transact-sql)

select (Transact-sql)

SET IDENTITY_INSERT (Transact-SQL)

Kavramlar

Kimlik sütunları çoğaltma