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í pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
sql database v Microsoft Fabric
Použitím tohoto tvrzení můžete vložit explicitní hodnoty do sloupce IDENTITY tabulky.
Tento článek a jeho IDENTITY syntax se liší na různých platformách SQL Database Engine. Pro Microsoft Fabric Data Warehouse vyberte Fabric Data Warehouse v rozbalovacím seznamu verzí.
Syntax
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
Argumenty
database_name
Název databáze, ve které se daná tabulka nachází.
schema_name
Název schématu, které tabulku obsahuje.
table_name
Název tabulky se sloupcem identity.
Poznámky
Kdykoli může mít vlastnost IDENTITY_INSERT nastavenou na ONpouze jednu tabulku v relaci. Pokud má tabulka tuto vlastnost nastavenou na , ONa vydáte SET IDENTITY_INSERT ON příkaz pro jinou tabulku, SQL Server vrátí chybovou zprávu, která uvádíSET IDENTITY_INSERT, že je již ON, a nahlásí tabulku, pro kterou ON je nastavena.
- Když
incrementje argument IDENTITY funkce kladný a vložená hodnota je větší než aktuální hodnota identity tabulky, SQL Database Engine automaticky použije nově vloženou hodnotu jako aktuální hodnotu identity. - Když
incrementje argument IDENTITY funkce záporný a vložená hodnota je menší než aktuální hodnota identity tabulky, SQL Server automaticky použije nově vloženou hodnotu jako aktuální hodnotu identity.
Nastavení SET IDENTITY_INSERT je nastaveno při spuštění nebo spuštění, nikoli v době analýzy.
Dovolení
Musíte vlastnit stůl nebo mít ALTER povolení k jeho umístění.
Příklady
Následující příklad vytvoří tabulku se sloupcem identity a ukazuje, jak se dá nastavení SET IDENTITY_INSERT použít k vyplnění mezery v hodnotách identity způsobených příkazem DELETE.
USE AdventureWorks2022;
GO
Vytvoření tabulky nástrojů
CREATE TABLE dbo.Tool
(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR (40) NOT NULL
);
GO
Vložte hodnoty do tabulky produktů.
INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
('Hammer'),
('Saw'),
('Shovel');
GO
Vytvořte mezeru v hodnotách identity.
DELETE dbo.Tool
WHERE Name = 'Saw';
GO
SELECT *
FROM dbo.Tool;
GO
Zkuste vložit explicitní hodnotu ID 3.
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
Předchozí INSERT kód vrací následující chybu:
An explicit value for the identity column in table 'AdventureWorks2022.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON.
Nastavte IDENTITY_INSERT na ON.
SET IDENTITY_INSERT dbo.Tool ON;
GO
Zkuste vložit explicitní hodnotu ID 3.
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
SELECT *
FROM dbo.Tool;
GO
Položte stůl na nářadí.
DROP TABLE dbo.Tool;
GO
Související obsah
- CREATE TABLE (Transact-SQL)
- CREATE TABLE (Transact-SQL) IDENTITY (Vlastnost)
-
SCOPE_IDENTITY (Transact-SQL) - INSERT (Transact-SQL)
- SET Příkazy (Transact-SQL)
platí pro:Warehouse v Microsoft Fabric
Použijte SET IDENTITY_INSERT k vložení explicitních hodnot do sloupce IDENTITY tabulky v Fabric Data Warehouse. Použijte SET IDENTITY_INSERT je, když potřebujete vložit konkrétní hodnoty do sloupce identity, například při migraci dat, obnově po havárii nebo při doplňování hodnot sentinel v tabulkách dimenzí.
Syntax
SET IDENTITY_INSERT [ schema_name. ] table_name { ON | OFF }
Argumenty
schema_name
Název schématu, které tabulku obsahuje.
table_name
Název tabulky se sloupcem identity.
Poznámky
Kdykoli může mít vlastnost IDENTITY_INSERT nastavenou na ONpouze jednu tabulku v relaci. Pokud má tabulka již nastavenou tuto vlastnost na a ON vydáte pro SET IDENTITY_INSERT ON jinou tabulku, chyba identifikuje tabulku, pro kterou je vlastnost již nastavena.
Po dokončení explicitních vložení se vraťte IDENTITY_INSERT zpět na OFFDBCC CHECKIDENT a spusťte DBCC CHECKIDENT pro RESEED přenastavení rozsahu identity a prevenci možných konfliktů s budoucími automaticky generovanými hodnotami.
Fabric Data Warehouse nezaručuje jedinečnost identitních hodnot, když IDENTITY_INSERT je použita. Explicitně vložené hodnoty mohou zavést duplicity, pokud neprovedete DBCC CHECKIDENT realignment identity metadata dříve, než systém vygeneruje další hodnoty.
Dovolení
Musíte vlastnit stůl nebo mít ALTER povolení k jeho umístění.
Limitations
SET IDENTITY_INSERT platí pouze pro INSERT a COPY INTO výroky. Neumožňuje vám aktualizovat stávající hodnoty sloupců identity.
Příklady
A. Vložte hodnoty sentinelů do tabulky rozměrů
Nejčastějším využitím IDENTITY_INSERT je vyplňování hodnot sentinelů, například -1 pro "Unknown", v tabulkách dimenzí během nastavení nebo migrace datového skladu.
-- Create a dimension table with an IDENTITY column
CREATE TABLE dbo.DimCustomer (
CustomerKey BIGINT IDENTITY,
CustomerName VARCHAR(100),
Email VARCHAR(200)
);
-- Enable IDENTITY_INSERT to add sentinel rows
SET IDENTITY_INSERT dbo.DimCustomer ON;
INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName, Email)
VALUES (-1, 'Unknown', 'N/A');
INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName, Email)
VALUES (-2, 'Not Applicable', 'N/A');
SET IDENTITY_INSERT dbo.DimCustomer OFF;
-- Reseed to prevent conflicts with future auto-generated values
DBCC CHECKIDENT('dbo.DimCustomer', RESEED);
B. Migrovat data při zachování stávajících hodnot identity
Při migraci ze SQL Server nebo Azure Synapse Analytics používejte IDENTITY_INSERT k zachování existujících identitních hodnot a zachování referenční integrity.
-- Assume dbo.DimProduct has an IDENTITY column named ProductKey
SET IDENTITY_INSERT dbo.DimProduct ON;
INSERT INTO dbo.DimProduct (ProductKey, ProductName, Category, ListPrice)
VALUES (1, 'Widget A', 'Hardware', 19.99),
(2, 'Widget B', 'Hardware', 29.99),
(3, 'Gadget C', 'Electronics', 49.99);
SET IDENTITY_INSERT dbo.DimProduct OFF;
-- Reseed after migration
DBCC CHECKIDENT('dbo.DimProduct', RESEED);
C. Vyplňte mezeru v hodnotách identity
Pokud jsou řádky z tabulky odstraněny, použijte IDENTITY_INSERT je k vyplnění mezer v identitní sekvenci, když je to potřeba.
CREATE TABLE dbo.Tool (
ID BIGINT IDENTITY,
Name VARCHAR(40) NOT NULL
);
INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'), ('Hammer'), ('Saw'), ('Shovel');
-- Delete a row, creating a gap
DELETE FROM dbo.Tool WHERE Name = 'Saw';
-- Fill the gap with an explicit value
SET IDENTITY_INSERT dbo.Tool ON;
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
SET IDENTITY_INSERT dbo.Tool OFF;
DBCC CHECKIDENT('dbo.Tool', RESEED);
D. Vložte explicitní hodnoty pomocí COPY INTO
Příkaz COPY INTO podporuje IDENTITY_INSERT možnost ingestovat explicitní hodnoty přímo v příkazu.
COPY INTO Možnosti přepisují jakékoli nastavení na úrovni relace pro IDENTITY_INSERT.
COPY INTO dbo.Employees (EmployeeID 1, FirstName 2, LastName 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
IDENTITY_INSERT = 'ON'
);