Tôi không nghĩ rằng có bất kỳ lý do "nội bộ" thực sự. Siêu dữ liệu được lưu trữ ở cấp cột chứ không phải cấp bảng. Nó sẽ cần suy nghĩ lại mặc dù các hàm vô hướng như scope_identity()
và cú pháp cột giả $identity
như bây giờ sẽ có sự mơ hồ.
Về mặt triết học nếu mục đích của identity
việc tạo ra một cái gì đó xác định duy nhất một thực thể tại sao bạn lại cần hai giá trị tính toán tùy ý khác nhau đóng vai trò đó?
Và lợi ích ở đâu? Đây là một bản sao trang web chéo vì vậy tôi sẽ lặp lại ví dụ của tôi từ SO .
Cột Danh tính trong SQL Server có hạt giống và gia tăng tự động. Chúng ta luôn có thể tính toán giá trị id giả định thứ 2 là gì nếu chúng ta biết giá trị của cột id đầu tiên.
ví dụ: Nếu đây là cú pháp hợp pháp
create table #foo
(
bar int identity(1,10),
baz int identity(1000,1)
)
Chúng tôi sẽ không cần lưu trữ baz vì nó có thể được tính từ thanh như sau.
baz = 1000 + (bar-1)/10
Kể từ SQL Server 2012, bạn có thể tự loại mình ra và thêm bao nhiêu cột bằng cách sử dụng mặc định theo trình tự như bạn muốn vào một bảng. Ví dụ:
CREATE SEQUENCE dbo.Sequence1
AS integer
START WITH 1
INCREMENT BY 1
MAXVALUE 1000
CYCLE
CACHE 50;
CREATE SEQUENCE dbo.Sequence2
AS decimal(5,0)
START WITH 5
INCREMENT BY 10
MAXVALUE 250
CYCLE
CACHE 50;
CREATE TABLE dbo.T
(
id integer NOT NULL DEFAULT NEXT VALUE FOR dbo.Sequence1,
id2 decimal(5,0) NOT NULL DEFAULT NEXT VALUE FOR dbo.Sequence2,
);
INSERT dbo.T DEFAULT VALUES;
INSERT dbo.T DEFAULT VALUES;
INSERT dbo.T DEFAULT VALUES;
SELECT * FROM dbo.T;
DROP TABLE dbo.T;
DROP SEQUENCE
dbo.Sequence1,
dbo.Sequence2;