0

我想随后填充在SSRS表变量并调用一个SP来处理它的数据:填充的宽表与SSRS文本参数用分隔符

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 

在DataSet我想先填充表(在表变量声明):

insert into @Tbl1 
VALUES (@LS) 

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

我试着JOIN(SPLIT())用逗号没有运气。有任何想法吗?

谢谢!

+0

欢迎来到Stack Overflow。正如我上面所做的那样,如果您为易读性设置格式问题,您可能会得到更好的答案。干杯... – GreenAsJade 2014-10-27 23:21:47

回答

0

问题是@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表达式来确定字段值),并且您完成了!

+0

感谢您的快速回答!看起来我需要Visual Studio包含代码,因为我现在只使用Report Builder,是否正确?如果是这样的话,我将需要一个SQL UDF中的类似代码? – luboxing 2014-10-28 03:14:47

+0

[本MSDN文章](http://msdn.microsoft.com/en-AU/library/ms159238.aspx)表明您可以在Report Builder中使用嵌入式代码,但是我使用Visual Studio,因此我不知道它是如何实现的在那里完成。您还可以创建一个类似的SQL UDF,该UDF根据动态构建的SQL语句执行查询并返回数据集。如果这是将在多个报告中使用的东西,那么这是首选的方法。 – 2014-10-28 03:41:35