Vous souhaitez probablement utiliser SCOPE_IDENTITY pas @@ IDENTITY pour le restreindre à la valeur d'identité dans la portée actuelle. Cela évite d'insérer de nouvelles valeurs d'identité par des déclencheurs dans d'autres tables et non dans la table que vous venez d'insérer.
Mais vous pouvez calculer ce que la valeur d'identité est
SELECT IDENT_CURRENT('mytable') + IDENT_INCR('mytable') FROM mytable
Le problème est que vous n'êtes pas garanti que la valeur est. Vous devez disposer d'un verrou tel que les autres insertions sont refusées sur la table lors de son exécution pour garantir la précision de la valeur. Aussi, après avoir épuisé les entiers de 32 bits, je ne sais pas quelle est la logique. Je ne sais pas si ça roule ou échoue.
Editer: Je viens de tester cela (voir ci-dessous pour SQL) et il ne retourne pas la valeur correcte lorsqu'il n'y a pas de données. Et réensemencement avec DBCC CHECKIDENT ('tablename', RESEED, 200) en fait a donné lieu à la valeur suivante étant 201 non 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
Pas que je sache, mais pourquoi voulez-vous savoir? Quel est le problème de la grande image? – colithium
Si vous voulez un vidage rapide de la table, 'truncate table' reseeds automatiquement toutes les colonnes d'identité – SWeko