INSERT INTO TableName (Field1, Field2, Field3) VALUES (1, 2, 3);
SELECT SCOPE_IDENTITY();
Это пакет из нескольких операторов, поэтому я не уверен, что каждая клиентская библиотека будет возвращать значения одинаково;например, в классическом ADO может потребоваться перейти к следующему набору записей, прежде чем вы сможете прочитать значение.Но если вы используете ADO.NET, я знаю, что вы можете просто использовать ExecuteScalar для всей приведенной выше строки, и он вернет ваше SCOPE_IDENTITY
значение очень хорошо.
Внимание:ADO.NET вернет значение в виде decimal
, а не int
, как вы могли ожидать.Это потому, что SCOPE_IDENTITY
по какой-либо причине набирается как numeric(38,0)
.Поэтому вам нужно либо привести результат ExecuteScalar к decimal
, прежде чем привести его к int
, либо к SELECT CAST(SCOPE_IDENTITY() AS INT)
(при условии, что ваше поле IDENTITY имеет тип INT, а не какой-либо более крупный числовой тип).