0

SQL Server 2008のdb列があります。XMLDocを呼び出します。これには、次の形式のXMLが含まれています。

<XMLDoc xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.xxx.xxx.xxx">
  <Node>
    <SubNode>
      <SubSubNode>Value, Value, Value</SubSubNode>
      <IrrelevantNode></IrrelevantNode>
    </SubNode>
    ...

SubSubNodeカンマで区切られた0から20以上の値の家。単一の値にコンマを含めることはできませんが、誤って入力されています。たとえば、次のようSubSubNodeになります。

<SubSubNode>Value, Value, Value</SubSubNode>

以下SubSubNodeは正しくありません。

<SubSubNode>Value, </SubSubNode>

次のように表示するには、単一値のすべてのインスタンスを検索してコンマに置き換える必要があります。

<SubSubNode>Value</SubSubNode>

SQLでは、、、またはが許可されていないためends-withstarts-withmatchesのことしか考えられませんでした(これは値を検索するだけであり、置換にはまだ取り組んでいません)。

with xmlnamespaces(default 'http://schemas.xxx.xxx.xxx')
select [XMLDoc].value('(/XMLDoc/Node/SubNode/SubSubNode)[1]','varchar(2000)')
from XMLDoc 
where [XMLDoc].exist('/XMLDoc/Node/SubNode[1] [contains(SubSubNode[1],", ")]')=1

明らかに、これは、コンマを含む単一の値だけでなく、コンマを含むすべての値を選択します。

どんな援助も素晴らしいでしょう。

4

1 に答える 1

0

上記の解析を使用して、SubNode 要素からのデータを含む何らかの派生列を作成し、SQL ベースの解析関数を使用して末尾の値がコンマである場所を見つけることを考えましたか?

私が何を意味するかを示すために、いくつかの異なるxmlドキュメントを使用しました...このパターンに一致する行を見つけるために、これのバリエーションを構築できます...パターンを見つけるためのxquery手法ではありませんが、機能するはずです。

DECLARE @XML XML = '<XMLDoc xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.xxx.xxx.xxx">
     <Node>
    <SubNode>
      <SubSubNode>Value, Value,</SubSubNode>
      <IrrelevantNode></IrrelevantNode>
    </SubNode>
   </Node>
  </XMLDoc>'

 DECLARE @XML2 XML = '<XMLDoc xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.xxx.xxx.xxx">
     <Node>
    <SubNode>
      <SubSubNode>Value</SubSubNode>
      <IrrelevantNode></IrrelevantNode>
    </SubNode>
   </Node>
  </XMLDoc>'

DECLARE @xmlTbl TABLE(XmlDoc VARCHAR(MAX))


;with xmlnamespaces(default 'http://schemas.xxx.xxx.xxx')
 Insert Into @xmlTbl
select @XML.value('(/XMLDoc/Node/SubNode/SubSubNode)[1]','varchar(2000)');

;with xmlnamespaces(default 'http://schemas.xxx.xxx.xxx')
 Insert Into @xmlTbl
select @XML2.value('(/XMLDoc/Node/SubNode/SubSubNode)[1]','varchar(2000)')

Select *
From @xmlTbl
Where RIGHT(XmlDoc,1) = ','
于 2012-08-24T16:15:52.060 に答える