Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server - Peningkatan otomatis yang memungkinkan pernyataan UPDATE

Solusi untuk masalah ini dari "Di dalam 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

Atau alternatif lain dari buku yang sama yang mengalokasikan rentang lebih mudah. (Anda perlu mempertimbangkan apakah akan memanggil ini dari dalam atau dari luar transaksi Anda - di dalam akan memblokir transaksi bersamaan lainnya hingga transaksi pertama dilakukan)

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. Bagaimana cara mengeluarkan DateTime yang dapat dibatalkan dari database

  2. Buat Tabel HTML dengan SQL UNTUK XML

  3. Kinerja fungsi COUNT SQL

  4. Cara Memeriksa Pengaturan Konfigurasi untuk Database Mail di SQL Server (T-SQL)

  5. 4 Tips untuk Menyiapkan Peringatan SQL Server Anda