T-SQL

Explicitní vložení do IDENTITY sloupce

Pokud máme tabulku, která obsahuje IDENTITY sloupec, generuje SQL Server nového hodnoty pro IDENTITY sloupec automaticky. Pokud přeci jen chceme vložit hodnotu sami a nespoléhat na automatický generátor, stačí použít SET IDENTITY INSERT ON|OFF příkaz, jak ukazuje následující příklad:

SET IDENTITY_INSERT SampleTable ON
GO

INSERT SampleTable (RowID, Name, Value) 
    VALUES (1, 'Name1', 'Value1')
GO

SET IDENTITY_INSERT SampleTable OFF
GO

SET IDENTITY INSERT je ovšem dobrý sluha, ale zlý pán. Nesmíme totiž nikdy zapomenout, že se jedná o SET příkaz, který nastavuje vlastnosti aktuálního připojení. A platí, že v daném připojení může mít explicitní vkládání IDENTITY hodnot povolena vždy pouze jedna tabulka. Takže následující sekvence příkazů skončí s chybou:

CREATE TABLE dbo.SampleTable (
	RowID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
	Name NVARCHAR(100),
	Value NVARCHAR(100)
)
GO

SET IDENTITY_INSERT SampleTable ON

INSERT SampleTable (RowID, Name, Value) 
    VALUES (1, 'Name1', 'Value1')

--SET IDENTITY_INSERT SampleTable OFF
GO

CREATE TABLE dbo.SampleTable2 (
	RowID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
	Name NVARCHAR(100),
	Value NVARCHAR(100)
)
GO

SET IDENTITY_INSERT SampleTable2 ON
GO

INSERT SampleTable2 (RowID, Name, Value) 
    VALUES (10, 'Name1', 'Value1')
GO

SET IDENTITY_INSERT SampleTable2 OFF
GO

Leave a Reply

Your email address will not be published. Required fields are marked *