Bạn có thể muốn sử dụng SCOPE_IDENTITY không phải @@ IDENTITY để hạn chế giá trị danh tính trong phạm vi hiện tại. Điều này tránh được các giá trị nhận dạng mới được chèn bởi trình kích hoạt vào các bảng khác chứ không phải bảng mà bạn vừa chèn vào.
Nhưng bạn có thể tính toán được những giá trị bản sắc tiếp theo là
SELECT IDENT_CURRENT('mytable') + IDENT_INCR('mytable') FROM mytable
Vấn đề là bạn đang không được bảo đảm đó là giá trị. Bạn sẽ phải có một khóa để chèn khác bị từ chối trên bàn khi chạy nó để đảm bảo giá trị là chính xác. Ngoài ra sau khi bạn chạy ra khỏi số nguyên 32 bit, tôi không biết logic là gì. Tôi không biết liệu nó có trượt hay không.
Chỉnh sửa: Tôi vừa kiểm tra điều này (xem dưới đây cho SQL) và nó không trả lại giá trị chính xác khi không có dữ liệu. Và việc khởi đầu lại với DBCC CHECKIDENT ('tablename', gieo hạt, 200) thực sự dẫn đến việc giá trị tiếp theo là 201 không 200.
CREATE TABLE willtest (myid integer IDENTITY(1,1), myvalue varchar(255))
SELECT IDENT_CURRENT('willtest') + IDENT_INCR('willtest')
INSERT INTO willtest (myvalue)
VALUES ('1')
INSERT INTO willtest (myvalue)
VALUES ('2')
INSERT INTO willtest (myvalue)
VALUES ('3')
INSERT INTO willtest (myvalue)
VALUES ('4')
INSERT INTO willtest (myvalue)
VALUES ('5')
INSERT INTO willtest (myvalue)
VALUES ('6')
INSERT INTO willtest (myvalue)
VALUES ('7')
INSERT INTO willtest (myvalue)
VALUES ('8')
SELECT IDENT_CURRENT('willtest') + IDENT_INCR('willtest')
DBCC CHECKIDENT ('willtest', RESEED, 200)
SELECT IDENT_CURRENT('willtest') + IDENT_INCR('willtest')
INSERT INTO willtest (myvalue)
VALUES ('200')
INSERT INTO willtest (myvalue)
VALUES ('201')
INSERT INTO willtest (myvalue)
VALUES ('202')
INSERT INTO willtest (myvalue)
VALUES ('203')
INSERT INTO willtest (myvalue)
VALUES ('204')
INSERT INTO willtest (myvalue)
VALUES ('205')
INSERT INTO willtest (myvalue)
VALUES ('206')
INSERT INTO willtest (myvalue)
VALUES ('207')
SELECT IDENT_CURRENT('willtest') + IDENT_INCR('willtest')
SELECT * FROM willtest
DROP TABLE willtest
Nguồn
2009-02-18 20:21:33
Không phải là tôi biết, nhưng tại sao bạn muốn biết? Vấn đề ảnh lớn là gì? – colithium
Nếu bạn muốn xóa nhanh bảng, 'truncate table' sẽ tự động reseeds bất kỳ cột nhận dạng – SWeko