Таким образом, у меня есть таблица со столбцом идентификационных данных как первичный ключ, таким образом, это - целое число. Так, почему делает SCOPE_IDENTITY()
всегда возвращайте десятичное значение вместо интервала к моему приложению C#? Это является действительно раздражающим, так как десятичные значения неявно не преобразуют в целые числа в C#, что означает, что я теперь должен переписать набор материала и иметь много вспомогательных методов, потому что я использую SQL Server и Пост-ГРЭС, который Пост-ГРЭС действительно возвращает целое число для эквивалентной функции..
Почему делает SCOPE_IDENTITY()
не только возвращают простое целое число? Есть ли люди там, которые обычно используют значения decimal/non-identity для первичных ключей?
В SQL Server свойство IDENTITY
может быть присвоено tinyint
, smallint
, int
, bigint
, decimal(p, 0)
или numeric(p, 0)
столбцам. Поэтому функция SCOPE_IDENTITY
должна возвращать тип данных, который может охватывать все вышеперечисленное.
Как было сказано в предыдущих ответах, просто приведите его к int
на сервере перед возвратом, тогда ADO.NET определит его тип, как вы ожидаете.
Идентификатор области возвращаемое значение является десятичным (38,0)
CAST it, используйте предложение OUTPUT или назначьте его выходному параметру. чем SELECT SCOPE_IDENTITY ()
для клиента
попробуйте использовать это, и вы получите целое число:
ExecuteScalar('insert...; select CONVERT(int,scope_identity())');
Разве вы не можете просто привести его перед возвратом из запроса или хранимой процедуры (SP все равно всегда возвращают int, но, возможно, вы используете выходной параметр)?
Например SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY
И почему он это делает? Наверное, чтобы быть более гибким и обрабатывать большие числа.