WSTAWIANIE kolumny z ustawionym IDENTITY
SQL Server ma właściwość "IDENTITY", która automatycznie ustawia kolejny numer od 1 do określonej kolumny podczas dodawania rekordu. Jeśli na przykład w kolumnie A zostanie ustawiona opcja TOŻSAMOŚĆ i zostanie dodanych 3 rekordy, kolumna A zostanie automatycznie wypełniona wartościami 1, 2 i 3 w kolejności, w jakiej zostały dodane.
Nawet jeśli używasz instrukcji INSERT, wartość jest ustawiana automatycznie, więc nie ma potrzeby jawnego ustawiania wartości, ale myślę, że są przypadki, w których chcesz ustawić wartość jawnie, ponieważ jest ona używana dla klucza obcego itp.
Załóżmy na przykład, że istnieje tabela z właściwością "IDENTITY" ustawioną w kolumnie "ID", jak pokazano na rysunku.
Instrukcja INSERT, która wstawia wartość do tej tabeli, w tym kolumnę ID, wyglądałaby następująco:
insert into [テーブル名] ([ID], [Value]) values (1, 1)
Jednak kiedy próbuję go uruchomić, myślę, że pojawi się następujący błąd.
Msg 544, Poziom 16, Stan 1, Linia 1 Gdy IDENTITY_INSERT jest ustawiona na WYŁ., jawne wartości nie mogą być wstawiane do kolumny tożsamości tabeli "XXXXX".
Przyjmuje się, że kolumny, które są pierwotnie ustawione na IDENTITY, mają wartości ustawiane automatycznie, więc nie można jawnie ustawić wartości.
Jeśli naprawdę chcesz to ustawić, musisz ustawić "IDENTITY_INSERT" na "ON", jak opisano w komunikacie o błędzie. Włącz IDENTITY_INSERT przed WSTAWIANIEM i wróć do WYŁ., gdy wstawianie zostanie zakończone, tak jak w następującym języku SQL:
set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;
-- 確認
select * from [テーブル名];
Teraz możesz jawnie ustawić wartość i WSTAW JĄ. INSERT-SELECT przy użyciu tabel jest również poprawny.
Kolumny z IDENTITY są automatycznie przypisywane wartości od 1, ale jeśli jawnie ustawisz wartości w sposób opisany powyżej, możesz się zastanawiać, jaki numer zostanie przypisany w następnej kolejności. W takim przypadku następna przypisana wartość jest przypisywana z numeru po najwyższej wartości dodanej do tabeli, więc nie ma zduplikowanej wartości po wstawieniu nowego rekordu. (Istnieją jednak wyjątki ze względu na niepełnosprawność itp.)