VLOŽENÍ sloupce s nastavenou IDENTITOU
SQL Server má vlastnost "IDENTITY", která automaticky nastaví sekvenční číslo z 1 do konkrétního sloupce při přidání záznamu. Pokud například nastavíte IDENTITU ve sloupci A a přidáte 3 záznamy, sloupec A se automaticky naplní hodnotami 1, 2 a 3 v pořadí, ve kterém jste je přidali.
I když použijete příkaz INSERT, hodnota se nastaví automaticky, takže není třeba explicitně nastavovat hodnotu, ale myslím, že existují případy, kdy chcete nastavit hodnotu explicitně, protože se používá pro cizí klíč atd.
Předpokládejme například, že existuje tabulka s vlastností "IDENTITY" nastavenou ve sloupci "ID", jak je znázorněno na obrázku.
Příkaz INSERT, který vloží hodnotu do této tabulky, včetně sloupce ID, bude vypadat takto:
insert into [テーブル名] ([ID], [Value]) values (1, 1)
Když se však pokusím spustit, myslím, že se objeví následující chyba.
Zpráva 544, úroveň 16, stav 1, řádek 1 Je-li IDENTITY_INSERT nastavena na hodnotu VYPNUTO, nelze explicitní hodnoty vložit do sloupce identity v tabulce XXXXX.
U sloupců, které jsou původně nastaveny na HODNOTU IDENTITY, se předpokládá, že mají hodnoty nastaveny automaticky, takže hodnoty nelze explicitně nastavit.
Pokud ji opravdu chcete nastavit, musíte nastavit "IDENTITY_INSERT" na "ON", jak je popsáno v chybové zprávě. Zapněte IDENTITY_INSERT před vložením a zpět na VYPNUTO po dokončení vložení, jako v následujícím SQL:
set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;
-- 確認
select * from [テーブル名];
Nyní můžete explicitně nastavit hodnotu a VLOŽIT ji. INSERT-SELECT pomocí tabulek je také platný.
Sloupcům s IDENTITOU jsou automaticky přiřazeny hodnoty od 1, ale pokud explicitně nastavíte hodnoty, jak je popsáno výše, možná vás zajímá, jaké číslo bude přiřazeno dále. V tomto případě je další přiřazená hodnota přiřazena z čísla po nejvyšší hodnotě přidané do tabulky, takže při vložení nového záznamu neexistuje žádná duplicitní hodnota. (Existují však výjimky z důvodu zdravotního postižení atd.)