Внимание: при использовании арифметических операторов +, -, *, / или% для неявного или явного преобразования значений констант типа int, smallint, tinyint или bigint.к типам данных с плавающей запятой, вещественным, десятичным или числовым применяются правила, которые SQL Server применяет при вычислении типа данных и точности результатов выражения, в зависимости от того, является ли запрос автоматически параметризованным или нет.
Следовательно, похожие выражения в запросах могут иногда давать разные результаты.Когда запрос не является автопараметризованным, значение константы сначала преобразуется в числовое значение, точность которого достаточно велика, чтобы содержать значение константы, перед преобразованием в указанный тип данных.Например, постоянное значение 1 преобразуется в числовое значение (1, 0), а постоянное значение 250 преобразуется в числовое значение (3, 0).
Когда запрос автопараметризован, постоянное значение всегда преобразуется в числовое (10, 0) перед преобразованием в окончательный тип данных.Когда задействован оператор /, точность результата типа может отличаться не только среди похожих запросов, но и значение результата может отличаться.Например, значение результата запроса с автопараметризацией, содержащего выражение SELECT CAST (1.0 / 7 AS float), будет отличаться от значения результата того же запроса, который не автопараметризован, поскольку результаты запроса с автопараметризацией будут усечены до соответствияв числовой (10, 0) тип данных.Для получения дополнительной информации о параметризованных запросах см. Простая параметризация.
Итак, вам необходимо преобразовать [val1], 1000 и [val2] в типы с плавающей запятой: