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

Odczytywanie i zwiększanie wartości int w SQL Server

Czy ważne jest, aby numery partii były sekwencyjne? Dlaczego nie po prostu użyć identity ? Jest to lepsze pod względem współbieżności, ponieważ w przeciwnym razie musisz zablokować równoczesne próby wstawiania na wypadek, gdyby zostały wycofane i pozostawiłyby lukę w sekwencji.

Jeśli jednak jest to absolutnie konieczne, możesz to zrobić

CREATE TABLE dbo.Sequence 
  (
     OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
     val    INT
  )  

Wstaw rząd z początkowym nasionem.

INSERT INTO dbo.Sequence 
            (val)
VALUES     (1)  

Następnie, aby przydzielić zakres odpowiedniego rozmiaru dla swojej wkładki (oczywiście nazwij to w tej samej transakcji)

CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence 
SET @val = val = (val + @n);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL Zapytanie tabelę macierzową dla wolnej pozycji

  2. Niebezpieczeństwo używania „IF EXISTS... UPDATE .. ELSE .. INSERT” i jaka jest alternatywa?

  3. Tymczasowe buforowanie obiektów SQL Server

  4. Linq wybór zakresu rekordów

  5. połączenia kodeignitera i odbc