Aracılığıyla paylaş


CREATE TABLE (Transact-SQL) IDENTITY (Özellik)

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric'te DepoMicrosoft Fabric'te SQL veritabanı

Tabloda bir kimlik sütunu oluşturur. Bu özellik ve ALTER TABLE Transact-SQL ifadeleriyle CREATE TABLE birlikte kullanılır.

Note

IDENTITY özelliği, bir sütunun satır kimliği özelliğini kullanıma sunan SQL-DMO Identity özelliğinden farklıdır.

Transact-SQL söz dizimi kuralları

Syntax

Fabric Data Warehouse için Sözdizimi:

IDENTITY 
IDENTITY [ (seed , increment) ]

Arguments

seed

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

increment

Yüklenen önceki satırın kimlik değerine eklenen artımlı değer.

Hem tohumu hem de artışı veya hiçbirini belirtmeniz gerekir. Hiçbiri belirtilmezse, varsayılan değer (1,1) olur.

Remarks

Kimlik sütunları anahtar değerleri oluşturmak için kullanılabilir.

Bir sütundaki identity özelliği aşağıdaki koşulları garanti eder:

  • Her yeni değer geçerli tohuma ve artışa göre oluşturulur.

  • Belirli bir işlem için her yeni değer, tablodaki diğer eşzamanlı işlemlerden farklıdır.

Bir sütundaki kimlik özelliği aşağıdaki koşulları garanti etmez:

  • Değerin benzersizliği - Benzersizlik bir PRIMARY KEY veya kısıtlama veya UNIQUEUNIQUE dizin kullanılarak zorunlu kılınmalıdır.

  • Bir işlem içinde ardışık değerler - Tabloda başka eşzamanlı eklemeler olabileceğinden, birden çok satır ekleme işleminin satırlar için ardışık değerler alması garanti değildir. Değerlerin ardışık olması gerekiyorsa, işlem tabloda özel bir kilit veya yalıtım düzeyini kullanmalıdır SERIALIZABLE .

  • Sunucu yeniden başlatıldıktan veya diğer hatalardan sonra ardışık değerler - SQL Server performans nedenleriyle kimlik değerlerini önbelleğe alabilir ve veritabanı hatası veya sunucunun yeniden başlatılması sırasında atanan değerlerden bazıları kaybolabilir. Bu, ekleme sırasında kimlik değerinde boşluklara neden olabilir. Boşluklar kabul edilebilir değilse, uygulama anahtar değerleri oluşturmak için kendi mekanizmasını kullanmalıdır. Seçeneğiyle bir sıra oluşturucu kullanmak NOCACHE , boşlukları hiçbir zaman işlenmeyen işlemlerle sınırlayabilir.

  • Değerlerin yeniden kullanımı - Belirli bir tohuma/artışa sahip belirli bir kimlik özelliği için, kimlik değerleri altyapı tarafından yeniden kullanılmaz. Belirli bir insert deyimi başarısız olursa veya insert deyimi geri alınırsa, tüketilen kimlik değerleri kaybolur ve yeniden oluşturulmaz. Bu, sonraki kimlik değerleri oluşturulduğunda boşluklara neden olabilir.

Bu kısıtlamalar, performansı geliştirmek için ve birçok yaygın durumda kabul edilebilir olduklarından tasarımın bir parçasıdır. Bu kısıtlamalar nedeniyle kimlik değerlerini kullanamıyorsanız, geçerli bir değeri tutan ayrı bir tablo oluşturun ve uygulamanızla tabloya ve numara atamasına erişimi yönetin.

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

Bellek için iyileştirilmiş tablolarda, tohum ve artış olarak 1, 1ayarlanmalıdır. Tohum veya artış değerinin dışında 1 bir değere ayarlanması şu hatayla sonuçlanır: The use of seed and increment values other than 1 is not supported with memory optimized tables.

Tablo başına yalnızca bir kimlik sütunu oluşturulabilir.

Bir sütunda kimlik özelliği ayarlandıktan sonra kaldırılamaz. Yeni veri türü kimlik özelliğiyle uyumlu olduğu sürece veri türü değiştirilebilir.

Fabric Data Warehouse'da veya (, seedbelirtemezsinizincrement, çünkü bu değerler otomatik olarak yönetilir ve benzersiz tam sayılar sağlanır. BIGINT IDENTITY bir ifadede CREATE TABLE sütun tanımı için gereken tek şeydir. Daha fazla bilgi için Fabric Data Warehouse'daki IDENTITY bölümüne bakınız.

Uygulama farklılıklarına IDENTITY uyum sağladıktan sonra tabloları Vekilet anahtar sütunlarıyla Fabric Data Warehouse'a taşıyabilirsiniz.

Azure Synapse Analytics, kısıtlamayı veya PRIMARY KEYUNIQUE dizini desteklemezUNIQUE. Daha fazla bilgi için bkz. Synapse SQL havuzunda vekil anahtarlar oluşturmak için KIMLIK kullanma. - Azure Synapse Analytics'teki özel SQL havuzlarında, kimlik değerleri veri deposunun dağıtık mimarisi nedeniyle artırılmaz. Daha fazla bilgi için bkz. Synapse SQL havuzunda vekil anahtarlar oluşturmak için KIMLIK kullanma. - IDENTITY Azure Synapse Analytics'te sunucusuz SQL havuzları tarafından desteklenmez.

Examples

A. CREATE TABLE ile IDENTITY özelliğini kullanma

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

USE AdventureWorks2022;
GO
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şluk bulmak için genel söz dizimi kullanma

Aşağıdaki örnekte, veriler kaldırıldığında kimlik değerlerinde boşluk bulmak için genel söz dizimi gösterilmektedir.

Note

Aşağıdaki Transact-SQL betiğinin ilk bölümü yalnızca çizim için tasarlanmıştır. şu açıklamayla başlayan Transact-SQL betiğini çalıştırabilirsiniz: -- 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;

A. Fabric Data Warehouse'da IDENTITY sütunlu bir tablo oluşturun

Şunlar için geçerlidir: Doku Veri Ambarı

CREATE TABLE dbo.Employees (
    EmployeeID BIGINT IDENTITY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Retired BIT
);

Bu ifade, her yeni satırın otomatik olarak bir bigint değeri olarak benzersiz EmployeeID bir değer aldığı tablo oluştururdbo.Employees. Daha fazla bilgi için Fabric Data Warehouse'daki IDENTITY bölümüne bakınız.

Böylece SELECT... INTO bu tablonun bir kopyasını oluşturabilir ve özellik IDENTITY hedef tabloda kalıcı olarak kalır:

SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE Retired = 1;

Hedef tablodaki sütun, IDENTITY özelliği kaynak tablodan miras alır. Bu senaryoya uygulanan sınırlamalar listesi için SELECT - INTO Maddesi'nin Veri Tipleri bölümüne bakınız.