【问题标题】:Populating a wide table with SSRS text parameter with a delimiter使用带分隔符的 SSRS 文本参数填充宽表
【发布时间】:2014-10-27 23:13:19
【问题描述】:

我正在尝试在 SSRS 中填充表变量并随后调用 SP 来处理其中的数据:

DECLARE @Tbl1 TABLE
(
    D01 float,
    D02 float,
    D03 float,
    D04 float,
    D05 float,
    ...
    D96 float
)

为了填充它,我使用了一个文本参数@LS。输入是逗号分隔的字符串,包含 96 个元素:

0.635316969,0.756943899,0.890520142,1.028008362,1.166350106,1.30511861,1.444527254,1.580948571,1.578743639,1.575542931,1.573195746,1.571346448,1.571275321,1.56992391,1.568003484,1.567221089,1.556836567,1.543820351,1.53037, ...., ,0.514543561

在数据集中,我尝试先填充表(在表变量声明之后):

insert into @Tbl1
VALUES (@LS)

但在运行时出现此错误:“列名或提供的值的数量与表定义不匹配。”

我用逗号尝试了JOIN(SPLIT()),但没有运气。有什么想法吗?

谢谢!

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果您像我在上面所做的那样格式化您的问题以便于阅读,您可能会得到更好的答案。干杯...

标签: text reporting-services parameters multiple-columns delimiter


【解决方案1】:

问题是@LS 参数是一个单值文本参数,所以你不能这样使用它——你需要使用一个多值参数。

所以让我们尝试一些不同的东西。您不需要创建临时表,因为您可以构建列值以提供您想要使用 Sql 的数据集,如下所示:

SELECT 0.635316969 AS D01, 0.756943899 AS D02, ... , 0.514543561 AS D96

幸运的是,SSRS 中几乎所有内容都是表达式,因此我们只需要使用表达式从@LS 参数动态构建此 Sql 语句。转到Report 菜单然后Report Properties... 并单击Code 选项卡。输入以下代码:

Function MakeSql(LS As String) As String
  Dim Sql As String
  Dim Values() As String 
  Dim i As Integer

  Sql = "SELECT " 
  Values = Split(LS, ",")

  For i = 0 To Values.Length - 1
    Sql = Sql + Values(i) + " AS D" + Right("0" + CStr(i+1), 2) + ", "
  Next i

  Sql = Left(Sql, Len(Sql) - 2) ' Remove trailing comma

  Return Sql
End Function

所以我们正在做的是将字符串拆分为一个值数组,我们循环通过这些值创建一个 Sql 语句,将这些值别名为我们想要的字段名称。

右键单击您的数据集,选择Dataset Properties,然后按查询文本框旁边的fx 按钮。这允许我们为我们的 Sql 语句输入一个文本表达式,而不是一个实际的 Sql 语句。这里我们需要调用我们上面创建的自定义代码函数,它将插入我们自定义构建的 Sql 表达式:

=Code.MakeSql(Parameters!LS.Value)

确保您的数据集包含字段 D01D96(您必须手动设置这些字段,因为 SSRS 无法分析 Sql 表达式以确定字段值),然后您就完成了!

【讨论】:

  • 感谢您的快速回答!看起来我需要 Visual Studio 来包含代码,因为我现在只使用 Report Builder,对吗?如果是这样,我可能需要 SQL UDF 中的类似代码?
  • This MSDN article 建议您可以在报表生成器中使用嵌入式代码,但我使用的是 Visual Studio,所以我不知道它是如何在那里完成的。您还可以创建一个类似的 SQL UDF,它基于动态构建的 SQL 语句执行查询并传回数据集。如果这将在多个报告中使用,那么这是首选方法。
猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2015-09-06
相关资源
最近更新 更多