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

SQL Server 2005 - sử dụng chuỗi được tạo thay vì cột Identity?

Có, SQL 11 có các đối tượng SEQUENCE, hãy xem SQL Server v.Next (Denali):Sử dụng SEQUENCE .

Tạo trình tự thủ công là có thể, nhưng không được khuyến khích. Mẹo để thực hiện một trình tạo chuỗi là sử dụng UPDATE WITH OUTPUT trên một bảng tuần tự. Đây là mã giả:

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

Tôi đã bỏ qua một số chi tiết, nhưng đây là ý tưởng chung. Tuy nhiên, có một vấn đề lớn:bất kỳ giao dịch nào yêu cầu giá trị tiếp theo trên một chuỗi sẽ khóa trình tự đó cho đến khi nó cam kết, bởi vì nó sẽ đặt một khóa cập nhật trên giá trị trình tự. Điều này có nghĩa là tất cả các giao dịch phải nối tiếp nhau khi chèn các giá trị và sự suy giảm hiệu suất dẫn đến không thể chịu đựng được trong triển khai sản xuất thực tế.

Tôi thà để bạn gắn bó với các loại IDENTITY. Mặc dù không hoàn hảo nhưng chúng tốt hơn nhiều so với những gì bạn có thể tự mình đạt được.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điều chỉnh SQL Server - tất cả là về đo lường

  2. Cách khắc phục “Máy chủ không được định cấu hình cho RPC” Msg 7411 bằng T-SQL

  3. Hoạt động CRUD với ASP.NET Core MVC, Entity Framework Core và SQL Server

  4. Chuyển đổi '01 -Sep-2017 'thành '01 / 09/2017' trong T-SQL?

  5. Sử dụng kết quả của thủ tục đã lưu trữ trong câu lệnh Chọn