Sie möchten wahrscheinlich SCOPE_IDENTITY nicht @@ IDENTITY verwenden, um es auf den Identitätswert im aktuellen Bereich zu beschränken. Dadurch wird vermieden, dass neue Identitätswerte von Triggern in andere Tabellen eingefügt werden und nicht in die Tabelle, in die Sie gerade eingefügt haben.
Aber man kann berechnen, was der nächste Identitätswert
SELECT IDENT_CURRENT('mytable') + IDENT_INCR('mytable') FROM mytable
Das Problem ist, ist nicht garantiert, dass der Wert ist. Sie müssen eine Sperre haben, so dass andere Einfügungen auf dem Tisch bei der Ausführung verweigert werden, um sicherzustellen, dass der Wert korrekt ist. Auch nachdem Sie keine 32-Bit-Ganzzahlen mehr haben, weiß ich nicht, was die Logik ist. Ich weiß nicht, ob es rollt oder scheitert.
Edit: Ich habe gerade dies getestet (siehe unten für SQL) und es gibt nicht den richtigen Wert zurück, wenn keine Daten vorhanden sind. Und Nachsaat mit DBCC CHECK ('tablename', RESEED, 200) führte tatsächlich in dem nächsten Wert 201 nicht 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
Nicht, dass ich weiß, aber warum willst du wissen? Was ist das große Bild Problem? – colithium
Wenn Sie eine schnelle Spülung der Tabelle wünschen, setzt 'truncate table' automatisch alle Identitätsspalten zurück – SWeko