レポート サーバーのすべてのパラメーターの名前を取得するクエリを作成しようとしています。パラメータ データは 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]