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

SQL Server 2005 - menggunakan urutan yang dihasilkan alih-alih kolom Identitas?

Ya, SQL 11 memiliki objek SEQUENCE, lihat SQL Server v.Next (Denali) :Menggunakan SEQUENCE .

Membuat urutan manual dimungkinkan, tetapi tidak disarankan. Trik untuk melakukan sequence generator adalah dengan menggunakan UPDATE WITH OUTPUT pada tabel sequence. Ini pseudo-codenya:

CREATE TABLE Sequences (
    Name sysname not null primary key, 
    Sequence bigint not null default 0);
GO

CREATE PROCEDURE sp_getSequence
    @name sysname,
    @value bigint output
AS
    UPDATE Sequences
    SET Sequence = Sequence + 1
     OUTPUT @value = INSERTED.Sequence
    WHERE Name = @name;
GO

Saya meninggalkan beberapa detail, tetapi ini adalah ide umum. Namun, ada masalah besar:setiap transaksi yang meminta nilai berikutnya secara berurutan akan mengunci urutan itu sampai komit, karena itu akan menempatkan kunci pembaruan pada nilai urutan. Artinya semua transaksi harus bersambung satu sama lain saat memasukkan nilai dan penurunan kinerja yang dihasilkan tidak tertahankan dalam penerapan produksi nyata.

Saya lebih suka Anda tetap menggunakan tipe IDENTITY. Meskipun tidak sempurna, mereka jauh lebih baik daripada yang dapat Anda capai sendiri.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membalikkan karakter dalam string dengan bahasa campuran Kiri-ke-kanan dan Kanan-ke-kiri menggunakan SQL?

  2. Cara Memperbaiki "Daftar pilih untuk pernyataan INSERT berisi lebih sedikit item daripada daftar sisipan"

  3. Mengembalikan Nama Bulan di SQL Server Query

  4. Gabung penuh beberapa tabel pada kolom yang sama

  5. Temukan catatan dengan 3 atau lebih catatan berurutan dengan nilai yang sama