Megosztás a következőn keresztül:


CREATE TABLE (Transact-SQL) IDENTITY (Tulajdonság)

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsRaktár a Microsoft Fabric-benSQL adatbázis a Microsoft Fabric-ben

Létrehoz egy identitásoszlopot egy táblában. Ezt a tulajdonságot a CREATE TABLE és ALTER TABLE Transact-SQL állításokkal használják.

Note

Az IDENTITY tulajdonság eltér attól a SQL-DMO Identity tulajdonságtól, amely egy oszlop soridentitási tulajdonságát teszi elérhetővé.

Transact-SQL szintaxis konvenciók

Syntax

Szintaxis a Fabric Data Warehouse számára:

IDENTITY 
IDENTITY [ (seed , increment) ]

Arguments

seed

A táblába betöltött első sorhoz használt érték.

increment

A betöltött előző sor identitásértékéhez hozzáadott növekményes érték.

Meg kell adnia a magot és a növekményt, vagy egyiket sem. Ha egyik sincs megadva, az alapértelmezett érték (1,1).

Remarks

Az identitásoszlopok kulcsértékek létrehozásához használhatók.

Az oszlop identitástulajdonságai a következő feltételeket garantálják:

  • Minden új érték az aktuális mag és növekmény alapján jön létre.

  • Egy adott tranzakció minden új értéke eltér a tábla többi egyidejű tranzakciójától.

Az oszlop identitástulajdonságai nem garantálják a következő feltételeket:

  • Az érték egyedisége – Az egyediséget kényszer PRIMARY KEY vagy UNIQUEUNIQUE index használatával kell kikényszeríteni.

  • Egymást követő értékek egy tranzakción belül – A több sort beszúró tranzakció nem garantált, hogy egymást követő értékeket kap a sorokhoz, mert más egyidejű beszúrások is előfordulhatnak a táblában. Ha az értékeknek egymást követőnek kell lenniük, akkor a tranzakciónak kizárólagos zárolást kell használnia a táblán, vagy az elkülönítési SERIALIZABLE szintet kell használnia.

  • Egymást követő értékek a kiszolgáló újraindítása vagy egyéb hibák után – Az SQL Server teljesítménybeli okokból gyorsítótárazhatja az identitásértékeket, és a hozzárendelt értékek egy része elveszhet az adatbázis meghibásodása vagy a kiszolgáló újraindítása során. Ez a beszúráskor az identitásértékben hézagokat eredményezhet. Ha a hiányosságok nem elfogadhatók, akkor az alkalmazásnak saját mechanizmust kell használnia a kulcsértékek létrehozásához. A sorozatgenerátor lehetőséggel való NOCACHE használata korlátozhatja a nem véglegesített tranzakciók közötti réseket.

  • Értékek újrafelhasználása – Egy adott mag/növekményes identitástulajdonság esetében az identitásértékeket a motor nem használja újra. Ha egy adott beszúrási utasítás meghiúsul, vagy ha a beszúrási utasítás visszagördült, akkor a felhasznált identitásértékek elvesznek, és nem jönnek létre újra. Ez hiányosságokat okozhat a következő identitásértékek létrehozásakor.

Ezek a korlátozások a kialakítás részét képezik a teljesítmény javítása érdekében, és mivel számos gyakori helyzetben elfogadhatók. Ha ezen korlátozások miatt nem tud identitásértékeket használni, hozzon létre egy külön táblát, amely egy aktuális értéket tartalmaz, és kezelje az alkalmazással a tábla- és számhozzárendeléshez való hozzáférést.

Ha egy identitásoszlopot tartalmazó táblát közzétett a replikációhoz, az identitásoszlopot a használt replikáció típusának megfelelő módon kell kezelni. További információ: Identitásoszlopok replikálás.

A memóriaoptimalizált táblákban a magot és a növekményt a következőre 1, 1kell állítani: . A mag vagy a növekmény beállítása a következő hibától eltérő 1 értékre: The use of seed and increment values other than 1 is not supported with memory optimized tables.

Táblánként csak egy identitásoszlop hozható létre.

Ha az identitástulajdonság egy oszlopra van állítva, az nem távolítható el. Az adattípus módosítható mindaddig, amíg az új adattípus kompatibilis az identitástulajdonságokkal.

A Fabric Data Warehouse-ban nem lehet vagy -t megadni seedincrement, mivel ezek az értékek automatikusan kezelhetők, hogy egyedi egész számokat biztosítsanak. BIGINT IDENTITY ez az egyetlen, ami egy oszlop-definícióhoz szükséges egy CREATE TABLE állításban. További információért lásd: IDENTITY a Fabric Data Warehouse területén.

A Fabric Data Warehouse helyettes kulcsoszlopaival átmigrálhatod a táblákat , miután alkalmazkodtál a Fabric Data Warehouse megvalósításának különbségeihez IDENTITY .

Az Azure Synapse Analytics nem támogatja PRIMARY KEY vagy korlátozza vagy UNIQUEUNIQUE indexeli. További információ: Az IDENTITÁS használata helyettesítő kulcsok létrehozása Synapse SQL-készletben. - Az Azure Synapse Analytics dedikált SQL pooljaiban az identitás értékei nem incrementálisak az adatraktár elosztott architektúrája miatt. További információ: Az IDENTITÁS használata helyettesítő kulcsok létrehozása Synapse SQL-készletben. - IDENTITY nem támogatja az Azure Synapse Analytics szerver nélküli SQL pooljai.

Examples

A. Az IDENTITY tulajdonság használata a CREATE TABLE használatával

Az alábbi példa egy új táblát hoz létre a IDENTITY tulajdonság használatával egy automatikusan növekvő azonosítószámhoz.

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. Általános szintaxis használata az identitásértékek hiányosságainak kereséséhez

Az alábbi példa általános szintaxist mutat be az identitásértékek hiányosságainak kereséséhez az adatok eltávolításakor.

Note

A következő Transact-SQL szkript első része csak illusztrációhoz készült. Futtathatja a megjegyzéssel kezdődő Transact-SQL szkriptet: -- 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. Hozzon létre egy táblát IDENTITY oszloppal a Fabric Data Warehouse-ban

A következőkre vonatkozik: Háló adattárház

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

Ez az utasítás létrehozza azt a dbo.Employees táblázatot, ahol minden új sor automatikusan egyedi EmployeeIDbigint értéket kap. További információért lásd: IDENTITY a Fabric Data Warehouse területén.

Ezt használhatjuk SELECT... INTO arra, hogy létrehozzunk egy másolatot ebből a táblából, a tulajdonságot a IDENTITY céltáblában megőrizve:

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

A céltáblán lévő oszlop örökli a IDENTITY tulajdonságot a forrástáblától. Az ilyen helyzetre vonatkozó korlátozások listájáért lásd a SELECT - INTO Clause Adattípusok szakaszát.