Text 使用带分隔符的SSRS文本参数填充宽表

Text 使用带分隔符的SSRS文本参数填充宽表,text,reporting-services,parameters,multiple-columns,delimiter,Text,Reporting Services,Parameters,Multiple Columns,Delimiter,我试图在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.1663

我试图在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)
但在运行时出现此错误:提供的值的列名或数量与表定义不匹配

我不走运地尝试用逗号分隔。有什么想法吗

谢谢

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

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

SELECT 0.635316969 AS D01, 0.756943899 AS D02, ... , 0.514543561 AS D96
幸运的是,SSRS中的几乎所有内容都是一个表达式,因此我们只需要使用表达式从@LS参数动态构建此Sql语句。转到“报告”菜单,然后选择“报告属性…”。。。然后单击“代码”选项卡。输入以下代码:

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语句,将这些值别名为我们想要的字段名

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

=Code.MakeSql(Parameters!LS.Value)

确保您的数据集包含D01到D96字段,您必须手动设置这些字段,因为SSRS无法分析Sql表达式来确定字段值,您已经完成了

欢迎来到堆栈溢出。如果你像我上面所做的那样,将问题格式化以便于阅读,你可能会得到更好的答案。干杯…谢谢你的快速回答!看起来我需要VisualStudio包含代码,因为我现在只单独使用报表生成器,对吗?如果是这样,我可能需要在SQLUDF中使用类似的代码?建议您可以在报表生成器中使用嵌入式代码,但我使用的是VisualStudio,所以我不知道在那里是如何实现的。您还可以创建一个类似的SQLUDF,它根据动态构建的SQL语句执行查询并传回数据集。如果这是将在多个报告中使用的方法,那么这是首选方法。