Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server — Auto-inkrementacja, która umożliwia UPDATE instrukcji

Rozwiązanie tego problemu z „Inside 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

Lub inna alternatywa z tej samej książki, która ułatwia przydzielanie zakresów. (Musisz zastanowić się, czy wywołać to z wewnątrz lub z zewnątrz swojej transakcji - wewnątrz zablokuje inne równoczesne transakcje, dopóki pierwsza nie zostanie zatwierdzona)

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 Błąd logowania Windows Auth:Login pochodzi z niezaufanej domeny

  2. HAS_DBACCESS() – Dowiedz się, czy użytkownik może uzyskać dostęp do bazy danych w SQL Server

  3. Wywołaj procedurę składowaną z parametrem wycenianym w tabeli z java

  4. SQL Server 2008 — Pobierz ograniczenia dotyczące tabel

  5. Jak uzyskać listę wszystkich tabel w bazie danych za pomocą TSQL?