sql - 如何使用变量动态设置小数精度
问题描述
我正在尝试在存储过程中动态设置小数精度,如下所示
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 中实现这一点
解决方案
这里的问题是你的想法完全错误。数据的格式化应该在表示层(在这种情况下为 SSRS)而不是RDBMS 中处理。尽管您可以动态声明具有动态精度或比例的内容,但您必须使用动态 SQL,这可能会使问题严重过度复杂化,并且可能会破坏您的 SSRS 报告,除非您了解如何将动态语句成功地实现到 SSRS 中。
相反,您应该使用表示层来确定格式。这在 SSRS 中并不是特别容易,但也不难。假设您的SSRS报告中有一个参数 ,Precision
定义为Integer
. 我还将使用来自以下 SQL 的基本数据集:
SELECT d
FROM (VALUES(10),(10.1),(10.12),(10.123),(10.1234))V(d);
这意味着您可能有一个看起来有点像这样的报告:
右键单击空白区域,然后选择报告属性并转到代码窗格。然后输入以下代码:
Public Function DynamicPrecision(ByVal Precision AS Integer) AS String
Dim I AS Integer
If Precision = 0
DynamicPrecision = "#,#"
Else
DynamicPrecision = "#,#."
For I = 1 to Precision
DynamicPrecision = DynamicPrecision & "0"
Next I
End If
End Function
现在单击您想要动态精度的单元格(或按住控件并单击单元格),然后按 F4 打开属性窗格。在属性窗格中进行精细格式化,然后下拉并选择“«表达式»”。然后输入以下表达式:
=Code.DynamicPrecision(Parameters!Precision.Value)
然后,您的单元格将动态格式化为该精度。
因此,对于0
、2
和4
,数据将如下所示:
推荐阅读
- java - 如何在 Java Swing MVC 架构中显示图像?
- c# - 如何创建 JSONPath 过滤器表达式以使用包含关键字进行搜索
- amazon-web-services - 短信未进入 aws SNS 服务
- steam - 获取新闻帖子的标题图片
- powerbi - 对 Power BI 中度量的结果值进行排名
- spring-boot - Spring Data JPA DistinctBy 预测
- flutter - mobx 计算值第一次在 UI 上未更新(观察)但在重新加载后
- docker - 如何为 GPL 合规性实施构建验证流程
- javascript - 将渐变作为蒙版应用于画布中的渐变填充?
- windows - 无法在附加模式下打开文件:无法打开流:权限被拒绝