Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server - Tăng tự động cho phép các câu lệnh CẬP NHẬT

Giải pháp cho vấn đề này từ "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

Hoặc một giải pháp thay thế khác từ cùng một cuốn sách giúp phân bổ phạm vi dễ dàng hơn. (Bạn sẽ cần cân nhắc xem nên gọi điều này từ bên trong hay bên ngoài giao dịch của mình - bên trong sẽ chặn các giao dịch đồng thời khác cho đến khi giao dịch đầu tiên thực hiện)

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. LEFT () so với SUBSTRING () trong SQL Server:Sự khác biệt là gì?

  2. Chèn trình kích hoạt Cập nhật cách xác định xem chèn hoặc cập nhật

  3. Bắt đầu với GearHost để phát triển cơ sở dữ liệu máy chủ SQL

  4. Hướng dẫn cơ sở dữ liệu SQL Server (MSSQL DBA) cho người mới bắt đầu quản trị cơ sở dữ liệu

  5. Hiểu các hàm GROUPING và GROUPING_ID trong SQL Server