Возможно, вы захотите использовать SCOPE_IDENTITY, а не @@ IDENTITY, чтобы ограничить его значением идентификатора в текущей области. Это позволяет избежать получения новых значений идентификаторов, вставленных триггерами в другие таблицы, а не в таблицу, в которую вы только что вставили.
Но вы можете вычислить, каково следующее значение идентичности
SELECT IDENT_CURRENT('mytable') + IDENT_INCR('mytable') FROM mytable
Проблема в том, что вам не гарантировано, что это значение.
Вы должны иметь блокировку, чтобы другие таблицы не запускались при запуске таблицы, чтобы обеспечить точное значение. Кроме того, после того, как у вас закончились 32-битные целые числа, я не знаю, какова логика. Я не знаю, перевернулся ли он или нет.
Edit:
Я только что проверил это (см. Ниже для SQL), и он не возвращает правильное значение, когда нет данных.
И повторное заполнение с помощью DBCC CHECKIDENT ('tablename', RESEED, 200) фактически привело к следующему значению 201, а не 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