Это зависит от вашего контекста вызова.
Если вы вызываете это из клиентского кода, вы можете использовать OUTPUT, а затем прочитать возвращаемое значение.
DECLARE @t TABLE (ColID int IDENTITY, ColStr varchar(20))
INSERT INTO @t (ColStr)
OUTPUT Inserted.ColID
VALUES ('Hello World')
Результат:
ColID
-----------
1
Если вы заключаете это в хранимую процедуру, использование OUTPUT - это больше работы. Там вы захотите использовать SCOPE_IDENTITY (), но вы не можете сделать это в одном выражении. Конечно, вы можете поместить несколько утверждений в одну строку с помощью ';' разделитель, но это не одно утверждение.
DECLARE @idValue int
DECLARE @t TABLE (ColID int IDENTITY, ColStr varchar(20))
INSERT INTO @t (ColStr) VALUES ('Hello World')
SELECT @idValue = SCOPE_IDENTITY()
Результат: переменная @idValue содержит значение идентификатора. Используйте параметр OUTPUT для возврата значения.