0

我正在寻找 SSRS 报告参数和用于编目报告的每个参数的数据集。我的目标是通过提示名称和提供该参数值的数据集来查找每个参数。有了这些信息,我将在一个 asp.net 项目中构建一组动态控件,以允许用户使用他们选择的参数创建自己的订阅。我知道信息在那里,但我不知道如何通过 SSMS 访问它。下面的代码显示了我尝试过的内容并为我提供了信息,但我无法将两者链接在一起。

-- Provided "as is" with no warranties of any kind. User assumes all risks of use.
/* The XML XQuery statements used below ignore namespace so that information can be retrieved
   from multiple RDL versions. */
use ReportServer$LTHSQL
;WITH CatalogWithXml AS (
    -- XMLifyies Catalog's Content column.
    /* For report (Type = 2) and shared data source (Type = 5) objects, the image-typed column
       Content stores the XML RDL defining the object. We convert this column to XML so that SQL's
       XML type's functions can be used on it. */
    SELECT *,
         ContentXml = (CONVERT(XML, CONVERT(VARBINARY(MAX), Content)))
    FROM Catalog
),

SharedDataSources AS (
    -- Details on uses of shared data sources.
    -- * Unused data sources are ignored.
    -- * ItemID identifies the catalog entry (e.g. report) using the shared data source. It is not
    --   the data source's ID!
    /* Table DataSource contains a row for each data source (embedded or shared) used in each report.
       Its column Name stores the data source name, as defined in the report. Shared data sources are
       defined (RDL XML) in the catalog. Inner joining between these two tables limits this CTE's
       resultset to details on shared data sources because embedded data sources don't have Link-ed
       rows in the catalog. */
    SELECT ds.ItemID,
        SharedDataSourceName = c.Name,
        LocalDataSourceName = ds.Name,
        DataProvider = ContentXML.value('(/*:DataSourceDefinition/*:Extension)[1]', 'NVARCHAR(260)'),
        ConnectionString = ContentXML.value('(/*:DataSourceDefinition/*:ConnectString)[1]', 'NVARCHAR(MAX)')
    -- Each DataSource row with a Link value represents a use of a shared data source.
    FROM DataSource ds
        -- Uses the Link value to look up the catalog entry defining the shared data source.
        JOIN CatalogWithXml c ON ds.Link = c.ItemID
),

AllDataSources AS (
    -- Details on both embedded & shared data sources *used* by reports.
    /* Embedded data sources are defined in the hosting report's RDL. Shared data sources are
       referenced (but not defined) in this RDL. We extract the relevant details and then join
       to the SharedDataSources CTE to assemble a resultset with details on each data source
       (embedded and shared) used by each report (identified by ItemID). */
    SELECT r.ItemID,
        r.LocalDataSourceName, -- embedded data source's name or local name given to shared data source
        sds.SharedDataSourceName,
        SharedDataSource = CAST ((CASE WHEN sds.SharedDataSourceName IS NOT NULL THEN 1 ELSE 0 END) AS BIT),
        DataProvider = ISNULL(r.DataProvider, sds.DataProvider),
        ConnectionString = ISNULL(r.ConnectionString, sds.ConnectionString)
    FROM (
        SELECT c.*,
                LocalDataSourceName = DataSourceXml.value('@Name', 'NVARCHAR(260)'),
                DataProvider = DataSourceXml.value('(*:ConnectionProperties/*:DataProvider)[1]', 'NVARCHAR(260)'),
                ConnectionString = DataSourceXml.value('(*:ConnectionProperties/*:ConnectString)[1]', 'NVARCHAR(MAX)')
            FROM CatalogWithXml c
                CROSS APPLY ContentXml.nodes('/*:Report/*:DataSources/*:DataSource') DataSource(DataSourceXml)
            WHERE c.Type = 2 -- limit to reports only
        ) r
        LEFT JOIN SharedDataSources sds ON r.ItemID = sds.ItemID AND r.LocalDataSourceName = sds.LocalDataSourceName
),

DataSets AS (
    -- Details on data sets used in reports.
    /* Outputs one row per data set used in each report. */
    SELECT ItemID,
        DataSetName = QueryXml.value('@Name', 'NVARCHAR(256)'),
        DataSourceName = QueryXml.value('(*:Query/*:DataSourceName)[1]', 'NVARCHAR(260)'),
        CommandType = QueryXml.value('(*:Query/*:CommandType)[1]', 'NVARCHAR(15)'),
        CommandText = QueryXml.value('(*:Query/*:CommandText)[1]', 'NVARCHAR(MAX)')
    FROM CatalogWithXml
        CROSS APPLY ContentXml.nodes('/*:Report/*:DataSets/*:DataSet') QueryData(QueryXml)
),

Data AS (
    -- Combines data set and data source details with additional information from Catalog.
    SELECT ds.ItemID,
        Name,
        Path,  
        LocalDataSourceName,
        SharedDataSource,
        SharedDataSourceName,
        DataProvider,
        ConnectionString,
        DataSetName,
        CommandType = ISNULL(CommandType, 'Text'), -- "Text" = default command type
        CommandText
    FROM DataSets ds
        JOIN AllDataSources src ON src.ItemID = ds.ItemID AND src.LocalDataSourceName = ds.DataSourceName
        JOIN Catalog c ON ds.ItemID = c.ItemID
)
SELECT * FROM Data




SELECT 
       a.name                                                   AS ReportName,
       Paravalue.value('Name[1]', 'VARCHAR(250)')               AS ParamName,
       Paravalue.value('Type[1]', 'VARCHAR(250)')               AS ParamDataType,
       Paravalue.value('Nullable[1]', 'VARCHAR(250)')           AS Nullable,
       Paravalue.value('AllowBlank[1]', 'VARCHAR(250)')         AS AllowBlank,
       Paravalue.value('MultiValue[1]', 'VARCHAR(250)')         AS MultiValue,
       Paravalue.value('UsedInQuery[1]', 'VARCHAR(250)')        AS UsedInQuery,
       Paravalue.value('Prompt[1]', 'VARCHAR(250)')             AS Prompt,
       Paravalue.value('DynamicPrompt[1]', 'VARCHAR(250)')      AS DynamicPrompt,
       Paravalue.value('PromptUser[1]', 'VARCHAR(250)')         AS PromptUser,
       Paravalue.value('State[1]', 'VARCHAR(250)')              AS State

FROM 
(
   SELECT 
       C.Name                                      AS Name,
       CONVERT(XML,C.Parameter)                    AS ParameterXML
   FROM  Catalog C
   WHERE  C.Content IS NOT NULL
   AND  C.TYPE  = 2  -- only reports
  -- AND  C.Name LIKE '%' + ISNULL(@ReportName, Name) + '%'  -- if param is null, then return all reports
) AS  a
CROSS APPLY ParameterXML.nodes('//Parameters/Parameter') p ( Paravalue )



我想要提示的参数名称和用于创建可用值的数据集。所以像 SSRS Promp Param = "Customers" 我想在该记录中有一个标记为数据集的列,该列显示类似于“Select * from customers”的内容如果这是分配给该 SSRS 参数的数据集

4

0 回答 0