IDENTITY (Property) (Transact-SQL)

Tworzy kolumna tożsamości w tabela.Ta właściwość jest używana z instrukcji ALTER tabela i CREATE tabela Transact-SQL instrukcje.

Uwaga

Właściwość IDENTITY różni się od SQL-DMO Tożsamość właściwość, która umożliwia uzyskanie dostępu do właściwość tożsamości wiersza, kolumna.

Topic link iconKonwencje składni języka Transact-SQL

IDENTITY [ (seed , increment) ]

Argumenty

  • seed
    Jest to wartość, która jest używana dla bardzo pierwszego wiersza, które są ładowane do tabela.

  • increment
    Jest to wartość przyrostowe, która jest dodawana do wartości tożsamości poprzedniego wiersza, który został załadowany.

Należy określić zarówno siewnego i przyrostu lub żadna.Jeśli żadna z nich nie zostanie określony, wartość domyślna to (1,1).

Remarks

Jeśli kolumna tożsamości tabela z często dokonywane są usunięcia, pomiędzy wartościami tożsamości identyfikacyjnymi mogą występować luki.Jeśli jest to niepożądane, nie należy używać właściwość tożsamości.Jednak aby upewnić się, czy nie występują przerwy zostały utworzone lub wypełnić istniejących przerwy, należy ocenić istniejące wartości tożsamości przed jawnie wprowadzić jeden z zestaw ON IDENTITY_INSERT.

Jeśli są ponowne używanie wartości usunięto tożsamości, należy użyć przykładowego kodu b przykład szukać następna wartość dostępnych tożsamości.Zamień tablename, column_type, a MAX(column_type) - 1 z nazwą tabela kolumna tożsamości typu danych, a wartość numeryczna maksymalna dozwolona wartość (dla tego typu danych) -1.

Należy sprawdzić bieżącą wartość tożsamości i porównać go z maksymalną wartością za pomocą CHECKIDENT DBCC kolumna tożsamości.

Jeśli tabela z kolumną identyfikacji zostanie opublikowana dla replikacja, kolumna tożsamości muszą być zarządzane w taki sposób, że jest odpowiednia dla typu replikacja używane.Aby uzyskać więcej informacji zobaczReplikowanie kolumny tożsamości.

Przykłady

A.Przy użyciu właściwość IDENTITY z CREATE tabela

W następującym przykładzie zostanie utworzony nowy przy użyciu tabela IDENTITY Właściwość automatycznie kolejnym numerem identyfikacyjnym.

USE AdventureWorks
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.Przy użyciu składni ogólnej do znajdowania luk w wartości tożsamości

W poniższym przykładzie przedstawiono składnię rodzajowego do znajdowania luk w wartości tożsamości, gdy dane zostaną usunięte.

Uwaga

Pierwsza część następujące Transact-SQL skrypt jest przeznaczony wyłącznie. Można uruchomić Transact-SQL skrypt, który rozpoczyna się od komentarza: -- 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