У меня только что был скрипт, который возвращал первичный ключ вставки и использовал
SELECT @@identity
на моем первичном ключе bigint, и я получаю ошибку при использовании long - вот почему я начал этот поиск. Правильный ответ, по крайней мере в моем случае, состоит в том, что тип, возвращаемый этим выбором, является NUMERIC, что соответствует десятичному типу. Использование long вызовет исключение приведения.
Это одна из причин, чтобы проверить свои ответы в более чем одном поиске Google (или даже в переполнении стека!).
Цитирую администратора базы данных, который мне помог:
... BigInt - это не то же самое, что INT64, независимо от того, насколько они похожи. Частично причина в том, что SQL будет часто преобразовывать Int / BigInt в Numeric как часть обычной обработки. Поэтому, когда дело доходит до OLE или .NET, требуется преобразование NUMERIC в INT.
Мы не часто замечаем, так как напечатанное значение выглядит одинаково. "