Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server - Автоматично увеличаване, което позволява изрази UPDATE

Решение на този проблем от "Вътре в Microsoft SQL Server 2008:T-SQL заявка"

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

Или друга алтернатива от същата книга, която разпределя диапазони по-лесно. (Трябва да помислите дали да извикате това отвътре или извън вашата транзакция - вътре ще блокира други едновременни транзакции, докато първата не се ангажира)

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 2005 Използване на DateAdd за добавяне на ден към дата

  2. Разликата във времето в SQL между две дати води до hh:mm:ss

  3. Използвайте COL_LENGTH(), за да получите дължината на колона в SQL Server

  4. Грешка в CTE:Типовете не съвпадат между котвата и рекурсивната част

  5. Предоставяне Изберете на изглед, а не на основна таблица, когато основната таблица е в друга база данни