Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sklad v Microsoft Fabric
SQL databáze v Microsoft Fabric
Vytvoří sloupec identity v tabulce. Tato vlastnost se používá s CREATE TABLE výroky a ALTER TABLE Transact-SQL.
Note
Vlastnost IDENTITY se liší od vlastnosti SQL-DMO Identity , která zveřejňuje vlastnost identity řádku sloupce.
Syntax
Syntax pro Fabric Data Warehouse:
IDENTITY
IDENTITY [ (seed , increment) ]
Arguments
seed
Hodnota použitá pro úplně první řádek načtený do tabulky.
increment
Přírůstková hodnota přidaná k hodnotě identity předchozího řádku, který byl načten.
Musíte zadat počáteční i přírůstkové nebo ani jedno. Pokud není zadán žádný z nich, výchozí hodnota je (1,1).
Remarks
Sloupce identity se dají použít ke generování klíčových hodnot.
Vlastnost identity ve sloupci zaručuje následující podmínky:
Každá nová hodnota se generuje na základě aktuálního počátečního a přírůstku.
Každá nová hodnota pro konkrétní transakci se liší od ostatních souběžných transakcí v tabulce.
Vlastnost identity ve sloupci nezaručuje následující podmínky:
Jedinečnost hodnoty – Jedinečnost musí být vynucena pomocí
PRIMARY KEYomezení neboUNIQUEUNIQUEindexu.Po sobě jdoucí hodnoty v rámci transakce – Transakce, která vkládá více řádků, není zaručeno získání po sobě jdoucích hodnot pro řádky, protože v tabulce mohou nastat další souběžné vložení. Pokud musí být hodnoty po sobě jdoucí, transakce by měla použít výhradní zámek tabulky nebo použít
SERIALIZABLEúroveň izolace.Po sobě jdoucí hodnoty po restartování serveru nebo jiných selhání – SQL Server může ukládat hodnoty identity do mezipaměti z důvodů výkonu a některé přiřazené hodnoty mohou být ztraceny během selhání databáze nebo restartování serveru. To může mít za následek mezery v hodnotě identity po vložení. Pokud mezery nejsou přijatelné, měla by aplikace k vygenerování hodnot klíče použít vlastní mechanismus. Použití generátoru
NOCACHEsekvencí s možností může omezit mezery na transakce, které nejsou nikdy potvrzeny.Opakované použití hodnot – Pro danou vlastnost identity s určitým počátečním/přírůstkem se hodnoty identity nevyuužijí modulem. Pokud se konkrétní příkaz insert nezdaří nebo pokud se příkaz insert vrátí zpět, ztratí se hodnoty spotřebované identity a negenerují se znovu. To může mít za následek mezery, když se vygenerují následující hodnoty identity.
Tato omezení jsou součástí návrhu, aby se zlepšil výkon, a protože jsou v mnoha běžných situacích přijatelné. Pokud kvůli těmto omezením nemůžete použít hodnoty identit, vytvořte samostatnou tabulku s aktuální hodnotou a spravujte přístup k tabulce a přiřazení čísel v aplikaci.
Pokud je tabulka se sloupcem identity publikovaná pro replikaci, musí se sloupec identity spravovat způsobem, který je vhodný pro typ použité replikace. Další informace najdete v tématu Replikace sloupců identit.
V tabulkách optimalizovaných pro paměť musí být počáteční a přírůstkové hodnoty nastaveny na 1, 1hodnotu . Nastavení počátečního nebo přírůstku na jinou hodnotu, než 1 má za následek následující chybu: The use of seed and increment values other than 1 is not supported with memory optimized tables
Pro každou tabulku je možné vytvořit pouze jeden sloupec identity.
Jakmile je vlastnost identity nastavená ve sloupci, nedá se odebrat. Datový typ lze změnit, pokud je nový datový typ kompatibilní s vlastností identity.
V Fabric Data Warehouse nelze specifikovat seed ani increment, protože tyto hodnoty jsou automaticky spravovány tak, aby poskytly unikátní celá čísla.
BIGINT IDENTITY je vše, co je potřeba pro definici sloupce ve CREATE TABLE výroku. Pro více informací viz IDENTITA v Fabric Data Warehouse.
Po přizpůsobení se rozdílům v implementaci v Fabric Data Warehouse můžete tabulky migrovat do Fabric Data Warehouse s náhradními klíčovými sloupci.IDENTITY
Azure Synapse Analytics nepodporuje PRIMARY KEY ani UNIQUE neomezuje ani UNIQUE index. Další informace najdete v tématu Použití identity k vytvoření náhradních klíčů ve fondu Synapse SQL.
- V dedikovaných SQL poolech v Azure Synapse Analytics nejsou hodnoty identity inkrementální kvůli distribuované architektuře datového skladu. Další informace najdete v tématu Použití identity k vytvoření náhradních klíčů ve fondu Synapse SQL.
-
IDENTITY není podporován serverless SQL pooly v Azure Synapse Analytics.
Examples
A. Použití vlastnosti IDENTITY s CREATE TABLE
Následující příklad vytvoří novou tabulku pomocí IDENTITY vlastnosti pro automatické zvýšení identifikačního čísla.
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. Použití obecné syntaxe k vyhledání mezer v hodnotách identity
Následující příklad ukazuje obecnou syntaxi pro hledání mezer v hodnotách identity při odebrání dat.
Note
První část následujícího skriptu Transact-SQL je určena pouze pro ilustraci. Můžete spustit Transact-SQL skript, který začíná komentářem: -- 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. Vytvořte tabulku se sloupcem IDENTITY ve Fabric Data Warehouse
Platí pro: Datový sklad prostředků infrastruktury
CREATE TABLE dbo.Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Retired BIT
);
Tento výrok vytváří tabulku dbo.Employees , kde každý nový řádek automaticky přijímá unikátní EmployeeID hodnotu jako bigint . Pro více informací viz IDENTITA v Fabric Data Warehouse.
Můžeme použít k SELECT... INTO vytvoření kopie této tabulky, přičemž v cílové tabulce se zachová vlastnost:IDENTITY
SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE Retired = 1;
Sloupec v cílové tabulce dědí vlastnost IDENTITY ze zdrojové tabulky. Pro seznam omezení, která se na tento scénář vztahují, viz sekce Datové typy v klauzuli SELECT - INTO.