Итак, у меня есть таблица со столбцом идентификаторов в качестве первичного ключа, поэтому это целое число. Итак, почему SCOPE_IDENTITY()
мое приложение C # всегда возвращает десятичное значение вместо int? Это действительно раздражает, поскольку десятичные значения не будут неявно преобразовываться в целые числа в C #, а это означает, что теперь мне нужно переписать кучу вещей и иметь много вспомогательных методов, потому что я использую SQL Server и Postgres, которые Postgres действительно возвращает целое число для эквивалентная функция ..
Почему не SCOPE_IDENTITY()
возвращает просто целое число? Есть ли люди, которые обычно используют десятичные / неидентификационные значения для первичных ключей?
SCOPE_IDENTITY
возвращаемое значение функции - десятичное (38,0)Разве вы не можете просто использовать его перед тем, как вернуть его из вашего запроса или сохраненной процедуры (SP всегда возвращают int, но, возможно, вы используете выходной параметр)?
подобно
SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY
И почему он это делает? Вероятно, чтобы быть более гибким и обрабатывать большие числа.
источник
SCOPE_IDENTITY
является встроенной функцией ... поэтому, когда вы делаетеExecuteScalar('insert...; select scope_identity());
это, она вернет десятичное число из этой функции, а не ожидаемое int.Возвращаемое значение идентификатора области является десятичным (38,0)
CAST его, используйте предложение OUTPUT или назначьте параметр вывода, а не
SELECT SCOPE_IDENTITY()
клиентисточник
int
ноSCOPE_IDENTITY()
по какой-то причине возвращаетSystem.Decimal
... ПредложениеOUTPUT
возвращает целое число, как и ожидалось, поэтому спасибо!попробуйте использовать это, и вы получите целое число:
ExecuteScalar('insert...; select CONVERT(int,scope_identity())');
источник
Это не точный ответ на заданный вопрос, но в духе ответов выше, как насчет (в T-SQL - MS SQLServer):
выберите convert (bigint, SCOPE_IDENTITY ())
источник