【问题标题】:Passing a multi-value parameter into a variable in SSRS without a stored procedure在没有存储过程的情况下将多值参数传递给SSRS中的变量
【发布时间】:2017-01-27 17:36:15
【问题描述】:

我无权访问 sp,但我创建了一个动态查询,它将接受一个多值参数,将它传递给一个变量,然后将在查询中使用该变量。我的查询的简短示例。

DECLARE @Parameter2 varchar(200)
SET @Parameter2 = @Parameter1

SELECT personID from foo where filename IN (@Parameter2)

我有一个@Parameter1 的报表参数,它允许多个值,这些值将来自数据集中的另一个查询。 I can pass a single filename from @Parameter1 to @Parameter2 with no issue, but when selecting multiple ones, I get the "invalid syntax at ...',' because the parameters are passed like this 'filename1,filename2,filename3'.

如何将这些从@Parameter1 到@Parameter2 的多个参数解析为可以在没有存储过程的查询中使用?我尝试在这里查看不同的主题并将@Parameter1 拆分为“,”并将变量加入数据集属性中,但我仍然收到无效的语法错误或声明标量变量错误。

我对SQL Server没有太多经验,但是在预览中选择了字符串之后似乎很难拆分,没有先通过sp的字符串。

【问题讨论】:

    标签: sql-server reporting-services ssrs-2008


    【解决方案1】:

    由于您可以执行 DYNAMIC SQL,因此请考虑以下事项

    DECLARE @Parameter1 varchar(200) = 'filename1,filename2,filename'
    
    DECLARE @Parameter2 varchar(200) = ''''+Replace(@Parameter1,',',''',''')+''''
    
    Declare @SQL varchar(max) = 'SELECT personID from foo where filename IN ('+@Parameter2+')'
    Exec(@SQL)
    

    生成的 SQL 如下所示:

    SELECT personID from foo where filename IN ('filename1','filename2','filename')
    

    【讨论】:

    • 感谢您的宝贵时间。有没有办法实现这个查询来接受未知数量的文件名而不是将它们列出来?
    • @ShannonRogers 会的。你可以传递 1 到 n 逗号分隔
    • @JohnCappelletti 我尝试了相同的查询,其中“Parameter1”是用户输入,就像在香农的查询中一样。但是,由于用户尚未设置“参数”,因此字段 personID 不可用于“参数 2”。我的查询中唯一的区别是“ DECLARE Parameter1 varchar(200) = ParameteruserInput ”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    相关资源
    最近更新 更多