Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Magazyn w Microsoft Fabric
Baza danych SQL w Microsoft Fabric
Tworzy kolumnę tożsamości w tabeli. Ta własność jest używana wraz z instrukcjami CREATE TABLE i ALTER TABLE Transact-SQL.
Note
Właściwość IDENTITY różni się od właściwości SQL-DMO Identity , która uwidacznia właściwość tożsamości wiersza kolumny.
Transact-SQL konwencje składni
Syntax
Składnia dla Fabric Data Warehouse:
IDENTITY
IDENTITY [ (seed , increment) ]
Arguments
seed
Wartość używana dla pierwszego wiersza załadowanego do tabeli.
increment
Wartość przyrostowa dodawana do wartości tożsamości poprzedniego wiersza, który został załadowany.
Należy określić zarówno nasion, jak i inkrementację, albo nie. Jeśli żadna z nich nie zostanie określona, wartość domyślna to (1,1).
Remarks
Kolumny tożsamości mogą służyć do generowania wartości kluczy.
Właściwość tożsamości w kolumnie gwarantuje następujące warunki:
Każda nowa wartość jest generowana na podstawie bieżącego inicjatora i przyrostu.
Każda nowa wartość dla określonej transakcji różni się od innych współbieżnych transakcji w tabeli.
Właściwość tożsamości w kolumnie nie gwarantuje następujących warunków:
Unikatowość wartości — unikatowość musi być wymuszana przy użyciu
PRIMARY KEYograniczenia lubUNIQUEindeksu.UNIQUEKolejne wartości w ramach transakcji — transakcja wstawiająca wiele wierszy nie jest gwarantowana, aby uzyskać kolejne wartości dla wierszy, ponieważ inne współbieżne operacje wstawiania mogą wystąpić w tabeli. Jeśli wartości muszą być następujące po sobie, transakcja powinna używać blokady wyłącznej w tabeli lub użyć
SERIALIZABLEpoziomu izolacji.Kolejne wartości po ponownym uruchomieniu serwera lub innych awariach — program SQL Server może buforować wartości tożsamości ze względu na wydajność, a niektóre z przypisanych wartości mogą zostać utracone podczas awarii bazy danych lub ponownego uruchomienia serwera. Może to spowodować przerwy w wartości tożsamości podczas wstawiania. Jeśli luki nie są akceptowalne, aplikacja powinna używać własnego mechanizmu do generowania wartości kluczy. Użycie generatora sekwencji z opcją
NOCACHEmoże ograniczyć luki do transakcji, które nigdy nie są zatwierdzane.Ponowne użycie wartości — dla danej właściwości tożsamości z określonym inicjatorem/przyrostem wartości tożsamości nie są ponownie używane przez aparat. Jeśli określona instrukcja insert nie powiedzie się lub instrukcja insert zostanie wycofana, używane wartości tożsamości zostaną utracone i nie zostaną wygenerowane ponownie. Może to spowodować przerwy w generowaniu kolejnych wartości tożsamości.
Te ograniczenia są częścią projektu w celu poprawy wydajności i dlatego, że są one akceptowalne w wielu typowych sytuacjach. Jeśli nie możesz używać wartości tożsamości z powodu tych ograniczeń, utwórz oddzielną tabelę zawierającą bieżącą wartość i zarządzaj dostępem do tabeli i przypisania liczb w aplikacji.
Jeśli tabela z kolumną tożsamości zostanie opublikowana na potrzeby replikacji, kolumna tożsamości musi być zarządzana w sposób odpowiedni dla używanego typu replikacji. Aby uzyskać więcej informacji, zobacz Replikowanie kolumn tożsamości.
W tabelach zoptymalizowanych pod kątem pamięci inicjator i przyrost musi być ustawiony na 1, 1wartość . Ustawienie inicjacji lub przyrostu na wartość inną niż 1 powoduje następujący błąd: The use of seed and increment values other than 1 is not supported with memory optimized tables.
Dla tabeli można utworzyć tylko jedną kolumnę tożsamości.
Po ustawieniu właściwości tożsamości w kolumnie nie można jej usunąć. Typ danych można zmienić tak długo, jak nowy typ danych jest zgodny z właściwością tożsamości.
W Fabric Data Warehouse nie można określić seed ani increment, ponieważ te wartości są automatycznie zarządzane, aby zapewnić unikalne liczby całkowite.
BIGINT IDENTITY jest wszystkim, co jest wymagane do definicji kolumny w zdaniu CREATE TABLE . Więcej informacji można znaleźć w artykule TOŻSAMOŚĆ w Fabric Data Warehouse.
Możesz migrować tabele do Fabric Data Warehouse z kolumnami zastępczych kluczy po dostosowaniu się do różnic w implementacji IDENTITY w Fabric Data Warehouse.
Usługa Azure Synapse Analytics nie obsługuje ani PRIMARY KEY nie ogranicza UNIQUE ani UNIQUE indeksu. Aby uzyskać więcej informacji, zobacz Using IDENTITY to create surrogate keys in a Synapse SQL pool (Używanie tożsamości do tworzenia kluczy zastępczych w puli SQL usługi Synapse).
- W dedykowanych pulach SQL w Azure Synapse Analytics wartości tożsamości nie są inkrementalne ze względu na rozproszoną architekturę hurtowni danych. Aby uzyskać więcej informacji, zobacz Using IDENTITY to create surrogate keys in a Synapse SQL pool (Używanie tożsamości do tworzenia kluczy zastępczych w puli SQL usługi Synapse).
-
IDENTITY nie jest obsługiwany przez serwerless SQL pools w Azure Synapse Analytics.
Examples
A. Używanie właściwości IDENTITY z funkcją CREATE TABLE
Poniższy przykład tworzy nową tabelę przy użyciu IDENTITY właściwości automatycznie zwiększającej numer identyfikacyjny.
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. Używanie składni ogólnej do znajdowania luk w wartościach tożsamości
W poniższym przykładzie przedstawiono ogólną składnię umożliwiającą znalezienie luk w wartościach tożsamości po usunięciu danych.
Note
Pierwsza część poniższego skryptu Transact-SQL jest przeznaczona tylko dla ilustracji. Możesz uruchomić skrypt Transact-SQL rozpoczynający 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;
A. Utwórz tabelę z kolumną IDENTITY w Fabric Data Warehouse
Dotyczy: Magazyn danych sieci szkieletowej
CREATE TABLE dbo.Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Retired BIT
);
To stwierdzenie tworzy tabelę dbo.Employees , w której każdy nowy wiersz automatycznie otrzymuje unikalną EmployeeID wartość bigint . Więcej informacji można znaleźć w artykule TOŻSAMOŚĆ w Fabric Data Warehouse.
Możemy użyć tego do SELECT... INTO stworzenia kopii tej tabeli, zachowując właściwość IDENTITY w docelowej tabeli:
SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE Retired = 1;
Kolumna w docelowej tabeli dziedziczy IDENTITY tę właściwość z tabeli źródłowej. Listę ograniczeń obowiązujących w tym scenariuszu można znaleźć w sekcji Typy Danych w klauzuli SELECT - INTO.