Identiteedikomplektiga veeru LISAMINE

Lehekülg uuendatud :
Lehe loomise kuupäev :

SQL Serveril on atribuut "IDENTITY", mis määrab kirje lisamisel järjestusnumbri automaatselt 1-lt kindlale veerule. Näiteks kui määrate veerus A identiteedi ja lisate 3 kirjet, täidetakse veerg A automaatselt väärtustega 1, 2 ja 3 nende lisamise järjekorras.

Isegi kui kasutate sisestusavaldust, seatakse väärtus automaatselt, seega ei ole vaja väärtust selgesõnaliselt määrata, kuid arvan, et on juhtumeid, kus soovite väärtuse selgesõnaliselt määrata, kuna seda kasutatakse võõrvõtme jaoks jne.

Oletame näiteks, et veerus "ID" on seatud atribuudiga "IDENTITY" tabel, nagu on näidatud joonisel.

Sisestamisväljaanne, mis lisab sellesse tabelisse väärtuse (sh veeru ID), näeks välja järgmine:

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

Siiski, kui ma püüan seda käivitada, arvan, et ilmub järgmine viga.

Msg 544, tase 16, olek 1, rida 1 Kui IDENTITY_INSERT väärtuseks on seatud VÄLJAS, ei saa tabeli "XXXXX" identiteediveergu lisada selgesõnalisi väärtusi.

Veergudel, mille väärtuseks on algselt seatud IDENTITEET, eeldatakse, et väärtused seatakse automaatselt, nii et väärtusi ei saa selgesõnaliselt määrata.

Kui soovite seda tõesti seadistada, peate määrama veateates kirjeldatud olekuks "IDENTITY_INSERT". Lülitage IDENTITY_INSERT enne SISESTAMIST sisse ja tagasi välja, kui lisamine on lõpule viidud, nagu järgmises SQL-is.

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

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

Nüüd saate väärtuse selgesõnaliselt määrata ja lisada. Tabelite kasutamine INSERT-SELECT on samuti kehtiv.

Identiteediga veergudele määratakse automaatselt väärtused väärtusest 1, kuid kui määrate selgesõnaliselt ülalkirjeldatud väärtused, võite küsida, milline number määratakse järgmisena. Sellisel juhul määratakse järgmine määratud väärtus numbrist pärast tabeli kõrgeimat lisandväärtust, seega pole uue kirje sisestamisel duplikaatväärtust. (Siiski on puuete tõttu erandeid jne.)