trešdiena, 2010. gada 15. septembris

Identity kolonnā sev vēlamās vērtības

Šeit aprakstīts, kā panākt, lai Identity kolonnā var ierakstīt sev vēlamās vērtības.

Piemērs, kurā tiek izveidota tabula ar divām kolonnām, kurām viena ir Identity un arī primārā atslēga, kā arī aizpilde ar 3 rindām:
create table dbo.IdentPiemeraTab
(
AtslegaID int identity(1,1) primary key,
Teksts nvarchar(50)
)
Go
insert into dbo.IdentPiemeraTab (teksts) values ('pirma rinda')
insert into dbo.IdentPiemeraTab (teksts) values ('otra rinda')
insert into dbo.IdentPiemeraTab (teksts) values ('tresa rinda')
Lai panāktu, ka var mainīt identity kolonnu:
SET IDENTITY_INSERT dbo.IdentPiemeraTab ON
insert into dbo.IdentPiemeraTab (atslegaID, teksts) values (6, '6 rinda')
insert into dbo.IdentPiemeraTab (atslegaID, teksts) values (7, '7 rinda')
SET IDENTITY_INSERT dbo.IdentPiemeraTab OFF
Lai pēc datu dzēšanas varētu atkal ievietot datus, bet Identity kolonna sāktu skaitītāju ar „1” (dati tiek dzēsti un ievietojot nākamo rindu tā būs pirmā, identity kolonnā būs vērtība „1”. Ja tikai dzēstu datus un ievietotu jaunu rindu, vērtība būtu „8”):
delete dbo.IdentPiemeraTab
DBCC CheckIdent (IdentPiemeraTab, RESEED, 0)
Un satīram pēc sevis:
drop table dbo.IdentPiemeraTab

1 komentārs:

  1. AFAIK ir nepatīkams ierobežojums, ka vienlaicīgi tikai vienai tabulai var likt iekšā ierakstus, kurām ir identity atribūts, t.i., ja vajag divām tabulām to, tad vispirms pirmajai ON, tad pirmajā insert, tad pirmajai OFF, tad otrajai ON, tad otrajā insert, un tad otrajai OFF. Ja tas notiek ciklā (kas, protams, pati par sevi ir ne pārāk konstrukcija), tad kods sanāk pabriesmīgs.

    AtbildētDzēst