【发布时间】:2020-09-09 13:41:38
【问题描述】:
我正在尝试在如下所示的存储过程中动态设置小数精度
DECLARE @precison int
select @precison = [ConfigValue] from [TestData] WHERE ConfigName = 'Precision'
select CAST( (10.56/10.25)as decimal(18, @precision))
如果精度为“2”,SP 应返回“1.03”作为结果。但强制转换函数不接受 @precision 参数作为变量。我想从存储过程中以十进制本身返回数据。我如何在 SQL Server 中实现这一点
【问题讨论】:
-
你首先想做什么?该值将返回给精度并不重要的客户端。您是否尝试截断或舍入结果?
-
你不能,不是没有动态SQL;然后变量将仅在动态语句内具有范围。然而,这闻起来像 XY Problem。
-
至于为什么不能改变精度,SQL或多或少是一种强类型语言。类型和精度非常重要,因为它们可能导致数据丢失或意外截断。查询引擎必须能够验证查询不会执行无效操作,这在不知道类型大小的情况下是不可能的
-
"如果格式化数据通过SP发送会更好" 不,反之亦然。格式化是由表示层来做的,而不是 RDBMS。这就是为什么它被称为 presentation 层;它正在确定如何最好地将数据呈现给最终用户。
标签: sql sql-server database reporting-services decimal