0

SQLReportingServicesデータベースのカタログテーブルにリストされている各レポートのパラメーターのコンマ区切りリストを取得しようとしています。

WITH cte AS (
    SELECT
    [Path], [Name], CreationDate, ModifiedDate,    
    CAST(parameter AS XML) AS parameter
    FROM     [dbo].[Catalog] AS c
)
SELECT  [Path], [Name], CreationDate, ModifiedDate, COALESCE(p.nodes('./Name')) 
FROM    cte AS c
    LEFT JOIN c.Parameter.nodes('/Parameters/Parameter') AS T ( p )
ORDER BY c.[Path]

BOLでは、COALESCEは最初のnull以外の値を返すために使用されると書かれていますが、返された値のテーブルをコンマで区切るために使用できることを読みました。

4

1 に答える 1

1

COALESCEを使用してCSVを生成する方法がわかりません。ただし、XMLPATHクエリで標準的なトリックを使用しました。

WITH cte AS (
    SELECT  [Path] ,
            [Name] ,
            CreationDate ,
            ModifiedDate ,
            CAST(parameter AS XML) AS parameter
    FROM    [dbo].[Catalog] AS c
), 
cte2 AS (
SELECT  [Path] ,
        p.value('(./Name)[1]', 'nvarchar(50)') AS [Parameter]
FROM    [cte] AS c
CROSS APPLY c.parameter.nodes('/Parameters/Parameter') AS T ( p )
)

SELECT [Path], 
    STUFF((
        SELECT ',' + [Parameter] 
        from cte2 c2
        WHERE c.[Path] = c2.[Path]    
        FOR XML PATH('') 
    ), 1, 1, '')
from [dbo].[Catalog] AS c

基本的に、クエリの最後に「FOR XML PATH('')」をスローすると、「返されたすべての行を取得し、それらを周囲のタグとして空の文字列と連結します」と言います。これで必要な場所に移動できますが、空の文字列以外のものを渡した場合の動作を確認するために試してみてください。

于 2012-08-10T21:23:56.850 に答える