• Reporting Services 的多值参数究竟能否用在数据集获取途径为存储过程的情景呢?


    编写映射到多值报表参数的查询

    您可以为要创建的任何报表参数定义多值参数。不过,如果要将多个参数值传回查询,则必须满足下列要求:

    • 数据源必须为 SQL Server、Oracle 或 Analysis Services。
    • 数据源不能是存储过程。Reporting Services 不支持将多值参数数组传递给存储过程。
    • 查询必须使用 IN 语句来指定参数。

    MSDN有上述的描述,可见多值参数必须用于数据集查询文本为Select ... Where XXXId in (@Parameters)的典型应用,

    如果用到存储过程就会报类型(ID参数是字符串型)无法转换等错误;

    如获取数据为 exec dbo.pGetOrders @OrderID    (存储过程内容见如下代码)

    USE [AdventureWorks]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    ALTER PROCEDURE [dbo].[spGetOrders]
        
    @OrderIDs varchar(500= ''
    AS
    BEGIN
        
    SET NOCOUNT ON;
        
        
    DECLARE @sql varchar(500)

        
    SET @sql = 'SELECT * FROM Sales.SalesOrderDetail';
        
    IF @OrderIDs <> '' SET @sql = @sql + ' WHERE [SalesOrderID] IN (' + @OrderIDs + ')';
        
    EXEC (@sql);
        
        
    SET NOCOUNT OFF;
    END;

    上面问题通过笔者反复琢磨,找到一种变通的办法:

    增加一个“内部”参数,将其设置为级联参数(必须排列在上面提到的多值参数之后),如@InnerOrderIDs类型为String,可用值和默认值都设置为表达式如下:

    =Join(Parameters!OrderID.Value,  ", ")

    然后修改获取数据的SQL为 exec dbo.pGetOrders @InnerOrderIDs就大功告成!

  • 相关阅读:
    初识CSS
    网页特殊符号HTML代码大全
    HTML基础
    python :ascii codec can't decode byte 0xe8 in posit
    linux shell中单引号、双引号和没有引号的区别
    初识HTML
    Python操作 Memcache、Redis、RabbitMQ
    使用fastdfs-zyc监控FastDFS文件系统
    Python---初识堡垒机
    SQL Server ->> Online Index Rebuilding(联机索引重建)
  • 原文地址:https://www.cnblogs.com/chriskwok/p/1388220.html
Copyright © 2020-2023  润新知