sql >> Databáze >  >> RDS >> Sqlserver

SQL Server - Auto-inkrementace, která umožňuje příkazy UPDATE

Řešení tohoto problému z "Uvnitř Microsoft SQL Server 2008:T-SQL Querying"

CREATE TABLE dbo.Sequence(
 val int IDENTITY (10000, 1) /*Seed this at whatever your current max value is*/
 )

GO

CREATE PROC dbo.GetSequence
@val AS int OUTPUT
AS
BEGIN TRAN
    SAVE TRAN S1
    INSERT INTO dbo.Sequence DEFAULT VALUES
    SET @val=SCOPE_IDENTITY()
    ROLLBACK TRAN S1 /*Rolls back just as far as the save point to prevent the 
                       sequence table filling up. The id allocated won't be reused*/
COMMIT TRAN

Nebo jiná alternativa ze stejné knihy, která alokuje rozsahy snadněji. (Museli byste zvážit, zda to zavolat zevnitř nebo zvenčí vaší transakce – uvnitř by se zablokovaly další souběžné transakce, dokud se ta první nepotvrdí)

CREATE TABLE dbo.Sequence2(
 val int 
 )

GO

INSERT INTO dbo.Sequence2 VALUES(10000);

GO

CREATE PROC dbo.GetSequence2
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence2 
SET @val = val = val + @n;

SET @val = @val - @n + 1; 


  1. Jak přidat vlastní atributy do připojovacího řetězce SQL?

  2. MySQL:Seřaďte hodnoty GROUP_CONCAT

  3. Jak snadno exportovat data Microsoft Access do Excelu

  4. java.util.MissingFormatArgumentException:Specifikátor formátu:s