Postat la
03-Feb-2009
ora
09:43 am
de
[Chetroesu]
Dupa cum se stie, in SQL Server nu exista notiunea de Secventa, asa cum majoritatea bazelor de date au. Este totusi o functionalitate foarte importanta si de aceea foarte multi incearca sa o simuleze. In continuare voi prezenta o modalitate prin care se poate simula o secventa.
In primul rand avem nevoie de un tabel care sa contina un camp IDENTITY. Acesta ne va asigura ca id-ul unui rand nou este intotdeauna unic. Putem spune ca deja avem implementata o secventa. Simpla inserare a unei inregistrari inseamna incrementarea ultimului ID generat, acesta fiind de fapt urmatorul numar din secventa.
Un astfel de tabel poate fi ceva de genul:
CREATE TABLE [sq_main] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[data] [varchar] (10) NOT NULL
) ON [PRIMARY]
GO
Modalitatea de extragere a unui id din secventa depinde de modul de implementare a fiecarei aplicatii in parte. Eu unul folosesc o procedura stocata de genul:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE procedure getIDFromSequence(@newID int out) as
begin
set @newID = -1
insert into sequence (data) values ('x')
set @newID = @@IDENTITY
delete from sequence where id = @newID
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Se vede foarte usor ca procedura insereaza un rand in secventa dupa care il sterge. Intre timp citeste noul numar generat in campul IDENTITY si il intoarce ca parametru de output al procedurii.