Может ли кто-нибудь уточнить для меня, почему я получаю сообщение об ошибке при попытке установить переменную @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]
[РЕДАКТИРОВАТЬ]
Спасибо Натану за ссылка .Это хорошая информация, о которой я не знал, но я все еще не понимаю, почему я получаю сообщение об ошибке и почему у меня есть «хитрости», чтобы заставить работать такой простой сценарий.
Это что-точто я должен знать, как иметь дело с программистом?
Или это ошибка, и если да, то я буду считать этот вопрос закрытым.