OSZLOP BESZÚRÁSA AZONOSÍTÓ készlettel
Az SQL Server rendelkezik egy "IDENTITY" tulajdonsággal, amely rekord hozzáadásakor automatikusan beállítja a szekvenciális számot 1-ről egy adott oszlopra. Ha például az A oszlopban az IDENTITY értéket állítja be, és 3 rekordot ad hozzá, az A oszlop automatikusan ki lesz töltve 1, 2 és 3 értékekkel abban a sorrendben, ahogyan hozzáadta őket.
Még akkor is, ha INSERT utasítást használ, az érték automatikusan be van állítva, így nincs szükség az érték explicit beállítására, de úgy gondolom, hogy vannak olyan esetek, amikor kifejezetten be szeretné állítani az értéket, mert idegen kulcshoz használják stb.
Tegyük fel például, hogy van egy táblázat, amelyen az "IDENTITÁS" tulajdonság az "ID" oszlopban van beállítva, ahogy az az ábrán látható.
Az INSERT utasítás, amely értéket szúr be ebbe a táblába, beleértve az AZONOSÍTÓ oszlopot is, a következőképpen néz ki:
insert into [テーブル名] ([ID], [Value]) values (1, 1)
Amikor azonban megpróbálom futtatni, úgy gondolom, hogy a következő hiba jelenik meg.
Msg 544, 16. szint, 1. állapot, 1. sor Ha IDENTITY_INSERT BEÁLLÍTÁSA KI, az explicit értékek nem szúrhatók be az "XXXXX" tábla identitásoszlopába.
Az eredetileg IDENTITY értékre beállított oszlopokról a rendszer automatikusan beállítja az értékeket, így nem állíthatja be explicit módon az értékeket.
Ha valóban be szeretné állítani, akkor a "IDENTITY_INSERT" beállítást "BE" értékre kell állítania a hibaüzenetben leírtak szerint. Kapcsolja be IDENTITY_INSERT BE a BESZÚRÁS előtt, majd a beszúrás befejezésekor térjen vissza a KI értékre, a következő SQL-hez hasonlóan:
set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;
-- 確認
select * from [テーブル名];
Most már explicit módon beállíthatja az értéket, és beszúrhatja azt. A táblákat használó INSERT-SELECT is érvényes.
Az IDENTITY oszlopokat a rendszer automatikusan hozzárendeli az 1-es értékekhez, de ha explicit módon állítja be a fent leírt értékeket, akkor felmerülhet a kérdés, hogy melyik számot rendeli hozzá legközelebb. Ebben az esetben a következő hozzárendelt érték a táblához hozzáadott legmagasabb érték utáni számból lesz hozzárendelve, így új rekord beszúrásakor nincs duplikált érték. (Vannak azonban kivételek a fogyatékosság miatt, stb.)