0

レポート サーバーのすべてのパラメーターの名前を取得するクエリを作成しようとしています。パラメータ データは XML として ntext フィールドに格納されるため、xquery を使用できないと思います。

私が最初にやり始めたのは、見つけると予想される各パラメーター名の case ステートメントを作成することでしたが、これは面倒になり、レポート開発者がパラメーター名と完全に一致しているとは思いません (実際、それが私の理由の 1 つです)。クエリが必要なため)。

ここに私がこれまでに持っているものがありますが、これはかなり単純化されています:

SELECT [Path], [Name], CreationDate, ModifiedDate, Parameter, 
CASE WHEN Parameter LIKE '%<Name>UserId</Name>%' THEN 'Yes' ELSE 'No' END AS  'UserId', 
CASE WHEN Parameter LIKE '%<Name>Country</Name>%' THEN 'Yes' ELSE 'No' END AS 'Country',
CASE WHEN Parameter LIKE '%<Name>Office</Name>%' THEN 'Yes' ELSE 'No' END AS 'Office'
FROM dbo.Catalog
WHERE type IN (2, 4)
AND [path] NOT LIKE '/Enterprise Reports%' 
AND [Path] NOT LIKE '/Email Subscription%'
ORDER BY [Path]

私が欲しいと思うのは、次のようなものです。

SELECT [Path], [Name], CreationDate, ModifiedDate, Parameter.query(/Parameters/Parameter/Name)
FROM dbo.Catalog
WHERE type IN (2, 4)
AND [path] NOT LIKE '/Enterprise Reports%' 
AND [Path] NOT LIKE '/Email Subscription%'
ORDER BY [Path]

問題は、それが xml ではなく ntext であることです。その上でconvertを使用できますか?

もう 1 つの問題は、XML 内の多くのパラメーターの名前フィールドを引き出すための xquery 構文がわからないことです。

ドキュメントのスキーマは非常に単純です。

<Parameters>
   <Parameter>
      <Name>Some name</Name>
      ...some more fields i don't care about...
   </Parameter>
   <Parameter>
      <Name>Another name</Name>
   </Parameter>
   ...more parameters, etc.
</Parameters>

名前に含まれるもののリストが欲しいだけです。

多くのノードが存在する可能性があり、各ノードは子として 1 つのノードを持ちます。

アップデート:

Nodes() が役立つように思えますが、Books Online と Simple Talk 記事の例を自分の状況に適用するのに苦労しています。これが私がこれまでに持っているものです:

SELECT [Path], [Name], CreationDate, ModifiedDate, Parameter, 
CASE WHEN Parameter LIKE '%<Name>UserId</Name>%' THEN 'Yes' ELSE 'No' END AS 'UserId', 
CASE WHEN Parameter LIKE '%<Name>Country</Name>%' THEN 'Yes' ELSE 'No' END AS 'Country',
CASE WHEN Parameter LIKE '%<Name>Office</Name>%' THEN 'Yes' ELSE 'No' END AS 'Office'
, CAST(Parameter AS XML).nodes('/Parameters/Parameter/Name')
FROM dbo.Catalog
WHERE type IN (2, 4)
AND [path] NOT LIKE '/Enterprise Reports%' 
AND [Path] NOT LIKE '/Email Subscription%'
ORDER BY [Path]
4

1 に答える 1

1

The answer to your first question is: yes, it's as easy as a CONVERT(xml, Parameter). Assuming that it's well formed XML, it'll convert just fine

The second question is going to involve the nodes() method of the XML data type. Read all about it: nodes().

Edit:

Now that I'm in a position to test, here's what I came up with:

WITH cte AS (
    SELECT   CAST(parameter AS XML) AS parameter
    FROM     [dbo].[Catalog] AS c
)
SELECT  p.value('(./Name)[1]', 'nvarchar(50)')
FROM    cte AS c
CROSS APPLY c.Parameter.nodes('/Parameters/Parameter') AS T ( p )
于 2012-08-09T20:31:02.527 に答える