Tony

Take a deep breath you seem to be getting flustered

Two things that may help

Firstly The @@Identity is local to a connection so is MU safe - I know this
doesn't work in your case.

Secondly Generator are simply a specific case of a stored procedure so try
this. (This is non syntax checked SQL so you'll have to debug it)

CREATE TABLE TableKeyGenerator
( 
     LastKeyValue INT NOT NULL IDENTITY,
        CONSTRAINT PK_TableKeyGenerator PRIMARY KEY NONCLUSTERED
             (LastKeyValue)
)

CREATE Proc GetTableNextKey AS
   INSERT INTO TableKeyGenerator (LastKeyValue) VALUES (NULL)
RETURN(@@Identity)


You then EXEC GetTableNextKey to get the ID (as per a generator)
This could also be done creating a table to hold all the next keys  ie

CREATE TABLE  TableSurrogateKeys
( 
     TableName CHAR(30) NOT NULL,
     LastKeyValue INT NOT NULL,
        CONSTRAINT PK_TableSurrogateKeys PRIMARY KEY NONCLUSTERED
             (TableName)
)

CREATE Proc GetTableNextKey @TableName char(30) AS
  DECLARE
      @LastSurrogateKey INTEGER,
      @SurrogateKey INTEGER,
      @Sucess INTEGER
-- Check to see if an entry exists for this table
  IF NOT EXIST SELECT 1 FROM TableSurrogateKeys WHERE TableName = @TableName 
  BEGIN
     INSERT INTO TableSurrogateKeys (TableName, LastKeyValue) VALUES (@TableName, 0)
  END     
  SELECT @Sucess=0
  WHILE @Success <> 0
  BEGIN
    BEGIN TRANSACTION
    SELECT @LastSurrogateKey = LastKeyValue FROM TableSurrogateKeys  WHERE TableName = 
@TableName 
    UPDATE TableSurrogateKeys  SET LastKeyValue = LastKeyValue+1 WHERE TableName = 
@TableName        
    SELECT @SurrogateKey = LastKeyValue FROM TableSurrogateKeys  WHERE TableName = 
@TableName
    SELECT @Sucess = @SurrogateKey - @LastSurrogateKey -1
    IF @Success <> 0 ROLLBACK
--Random pause
  END
  COMMIT
RETURN(@SurrogateKey)

This is off the top of my head but hope it helps

Regards Neven

N.K. MacEwan B.E. E&E

----- Original Message ----- 
From: Tony Blomfield <tonyb@ipro
link.co.nz>
To: Multiple recipients of list delphi <[EMAIL PROTECTED]>
Sent: Thursday, 4 November 1999 08:33
Subject: Re: [DUG]: Generators - Sequences, and Identities


> Quite simply the question was/is... Can @@identity be relied on?
>
> and also a statement of shock that generators dont exist in SQL Server 7!
> which means an entirely different design approach to Interbase, Oracle.
> -----Original Message-----
> From: Chris Reynolds <[EMAIL PROTECTED]>
> To: Multiple recipients of list delphi <[EMAIL PROTECTED]>
> Date: Thursday, 4 November 1999 06:58
> Subject: RE: [DUG]: Generators - Sequences, and Identities
>
>
> we use @@identity all the time without problems so i am slightly confused
by
> the diatribe. What exactly are you missing?
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On
> Behalf Of Tony Blomfield
> Sent: Wednesday, November 03, 1999 3:47 PM
> To: Multiple recipients of list delphi
> Subject: [DUG]: Generators - Sequences, and Identities
>
>
> Unless I have missunderstood, SQL7 has no equivolent of Interbases
> generators, or Oracles Sequences? Instead it has the identity data type
> which is akin to Access or paradox Autoincrement columns.
>
> The only time you seem to be able to see what your identity value was/is
is
> immediatly following a insert statement.
>
> Coming form an Interbase background for the last few years, this idea of
> identity columns looks very decadent, and  extremely shortsighted of
> MS/Sybase, and  really surprised me that it is still like this.
>
> So what about the multi user situation. Can we guarantee that Select
> Identity@@ will allways get the last identity for this specific user?
>
> What a dumb dumb idea. It more or less completely ignores the concept of
> using surrogate keys.
>
> What do others do about this for MSSQL based Delphi Apps? It seems to me
> that the only reasonable approach is to use an increment table, and
> copmpletely abandon the Indentity concept. What are others doing here?
>
> Thanks,
>
> Tony.
>
> --------------------------------------------------------------------------
-
>     New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
>                   Website: http://www.delphi.org.nz
>
> --------------------------------------------------------------------------
-
>     New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
>                   Website: http://www.delphi.org.nz
>
> --------------------------------------------------------------------------
-
>     New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
>                   Website: http://www.delphi.org.nz
>

---------------------------------------------------------------------------
    New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
                  Website: http://www.delphi.org.nz

Reply via email to