VLOŽENIE stĺpca so sadou IDENTITY

Stránka aktualizovaná :
Dátum vytvorenia strany :

SQL Server má vlastnosť "IDENTITA", ktorá po pridaní záznamu automaticky nastaví poradové číslo z 1 na konkrétny stĺpec. Ak napríklad v stĺpci A nastavíte identitu a pridáte 3 záznamy, stĺpec A sa automaticky vyplní hodnotami 1, 2 a 3 v poradí, v akom ste ich pridali.

Aj keď použijete príkaz INSERT, hodnota sa nastaví automaticky, takže nie je potrebné explicitne nastaviť hodnotu, ale myslím si, že existujú prípady, keď chcete hodnotu nastaviť explicitne, pretože sa používa pre cudzí kľúč atď.

Ako príklad predpokladajme, že existuje tabuľka s vlastnosťou "IDENTITA" nastavenou v stĺpci "ID", ako je znázornené na obrázku.

Príkaz INSERT, ktorý vloží hodnotu do tejto tabuľky vrátane stĺpca ID, by vyzeral takto:

insert into [テーブル名] ([ID], [Value]) values (1, 1)

Keď sa ho však pokúsim spustiť, myslím si, že sa objaví nasledujúca chyba.

Msg 544, úroveň 16, štát 1, riadok 1 Keď je IDENTITY_INSERT nastavené na VYPNUTÉ, explicitné hodnoty nie je možné vložiť do stĺpca identity tabuľky "XXXXX".

Predpokladá sa, že stĺpce, ktoré sú pôvodne nastavené na identitu, majú hodnoty nastavené automaticky, takže hodnoty nie je možné explicitne nastaviť.

Ak ho naozaj chcete nastaviť, musíte nastaviť "IDENTITY_INSERT" na "ZAPNUTÉ", ako je popísané v chybovom hlásení. Pred vložením zapnite IDENTITY_INSERT a po dokončení vložky späť na tlačidlo VYPNÚŤ, ako v nasledujúcom SQL:

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

-- 確認
select * from [テーブル名];

Teraz môžete explicitne nastaviť hodnotu a vložiť ju. Vložiť-VYBRAŤ pomocou tabuliek je tiež platný.

Stĺpcom s IDENTITOU sa automaticky priradia hodnoty od 1, ale ak explicitne nastavíte hodnoty opísané vyššie, možno vás bude zaujímať, aké číslo bude priradené ďalej. V tomto prípade sa ďalšia priradená hodnota priradí z čísla za najvyššou pridanou hodnotou do tabuľky, takže pri vkladaní nového záznamu nie je duplicitná hodnota. (Existujú však výnimky z dôvodu zdravotného postihnutia atď.)