Brauchst du vielleicht einen
Generator ?
Ein Generator liefert einen eindeutigen Integerwert zurück.
Dabei wird sichergestellt, dass kein anderer Client den gleichen Wert erhalten kann.
MSSQL unterstützt von sich aus keine Generatoren (Firebird kann's aber
http://www.fingerbird.de/generatorgu...erators_stored );
diese lassen sich aber nachbauen.
Zuerst die Tabelle Generators:
SQL-Code:
CREATE TABLE [dbo].[Generators] (
[IdGenerator] [varchar] (20) NOT NULL ,
[CurrentValue] [int] NOT NULL
) ON [PRIMARY]
GO
Dann noch folgende SP:
SQL-Code:
Create procedure generator_id ( @IdGenerator varchar(20))
as
begin
declare @ID integer
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION SP_GEN_ID
select @ID = CurrentValue from Generators where IdGenerator =@IdGenerator
IF @@ERROR <> 0 GOTO LBL_ERROR
update Generators set CurrentValue =CurrentValue + 1 where IdGenerator=@IdGenerator
IF @@ERROR <> 0 GOTO LBL_ERROR
COMMIT TRANSACTION SP_GEN_ID
return @ID
LBL_ERROR:
ROLLBACK TRANSACTION SP_GEN_ID
return 0
end