Share via


KİMLİK (özelliği) (Transact-SQL)

Kimlik sütun bir tablooluşturur.Bu özellik create table ve alter table ile kullanılan Transact-SQL ifadeleri.

Not

KİMLİK özellik SQL- dmo farklı Identity sütunsatır kimlik özelliği sergilerözellik .

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

IDENTITY [ (seed , increment ) ]

Bağımsız değişkenler

  • seed
    ' % S'tablo tabloyüklenen ilk satır için kullanılan değerdir.

  • increment
    Yüklenen önceki satır kimlik değerini eklenen artımlı değerdir.

Hem çekirdek ve Artım veya her ikisi de belirtmeniz gerekir.Hiçbiri belirtilmediyse varsayılan (1,1) ' dir.

Açıklamalar

Sık sık silme içeren bir tablo için kimlik sütun varsa, kimlik değerleri arasında boşluklar oluşabilir.Bu durum bir sorun oluşturacaksa, kimlik özellikkullanmayın.Ancak, hiçbir boşluklar oluşturulmuş olduğundan emin olun ya da var olan bir boşluğu doldurmak için varolan kimlik değeri açıkça bir set IDENTITY_INSERT on girmeden önce değerlendirin.

Kaldırılan kimlik değerini yeniden kullanıyorsanız, örnek kod örneği b sonraki kullanılabilir kimlik değeri aramak için kullanın.Yerine tablename, column_type, ve MAX(column_type) - 1 tablo adı, kimlik sütun veri türü ve değer (Bu veri türü için) izin verilen en yüksek sayısal değerini -1.

dbcc CHECKIDENT, geçerli kimlik değerini denetleyin ve kimlik sütunen büyük değer karşılaştırmak için kullanın.

çoğaltmaiçin kimlik sütun olan bir tablo yayımladıysanız, kimlik sütun kullanılan çoğaltma türü için uygun bir şekilde yönetilmelidir.Daha fazla bilgi için, bkz. Kimlik sütunları çoğaltılıyor.

Örnekler

A.create table ile kimlik özellik kullanma

Aşağıdaki örnek kullanarak yeni bir tablo oluşturur IDENTITY özellik için bir otomatik artan tanımlama numarası.

USE AdventureWorks2008R2
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.Boşluklar kimlik değerleri bulmak için genel sözdizimi kullanarak

Aşağıdaki örnek veri kaldırıldığında boşluklar kimlik değerleri bulmak için genel sözdizimi gösterir.

Not

Aşağıdaki ilk bölümünü Transact-SQL komut dosyası, yalnızca gösterim amacıyla tasarlanmıştır.Kaçabilirsiniz Transact-SQL açıklamaya başlatan komut dosyası: -- Create the img table.

-- 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