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.
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
See Also