Может кто-нибудь пояснить мне, почему я получаю сообщение об ошибке, когда пытаюсь установить переменную @a в приведенном ниже примере?
DECLARE @a BIGINT
SET @a = 7*11*13*17*19*23*29*31
/*
ERROR:
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.
*/
Что я мог выяснить, пока теперь, внутренне, SQL начинает выполнять математические вычисления, оценивая умножение и помещая временный результат в INT, затем преобразует его в BIGINT.
Однако, если я добавлю 1.0 * в свой список чисел, ошибки нет, поэтому я считаю, что на данный момент SQL использует float как временный результат, а затем преобразует его в BIGINT
DECLARE @b BIGINT
SET @b = 1.0 * 7*11*13*17*19*23*29*31
/*
NO ERROR
*/
Честно говоря, я не вижу ничего плохого в коде ... это так просто. ..
[Я использую SQL 2008]
[EDIT]
Спасибо Натану за ссылку . Это хорошая информация, о которой я не знал, но я до сих пор не понимаю, почему я получаю сообщение об ошибке и почему у меня есть "уловки", чтобы заставить такой простой скрипт работать.
Это то, что я должен как программист знает, что делать?
Или это ошибка, и если да, то я буду считать этот вопрос закрытым.