A maioria das pessoas faz isso da seguinte maneira:
INSERT dbo.Users(Username)
VALUES('my new name');
SELECT NewID = SCOPE_IDENTITY();
(Ou em vez de uma consulta, atribuindo isso a uma variável.)
Portanto, não são realmente duas consultas na tabela ...
No entanto, também existe a seguinte maneira:
INSERT dbo.Users(Username)
OUTPUT inserted.ID
VALUES('my new name');
Você realmente não poderá recuperar isso com
ExecuteNonQuery
, no entanto.