私はSQL Server 2014で作業しています。処理を行うストアドプロシージャを作成し、最後に最終的なクエリ出力を取得してXMLとしてフォーマットします。プロシージャのロジックの性質上、最終的な XML 出力からノードを削除する必要がある場合があります。XML 出力のサンプルを次に示します (簡潔にするために、ルート ノードは含めていません。私の質問に答える必要がないことを願っています)。
<DALink>
<InteractingIngredients>
<InteractingIngredient>
<IngredientID>1156</IngredientID>
<IngredientDesc>Lactobacillus acidophilus</IngredientDesc>
<HICRoot>Lactobacillus acidophilus</HICRoot>
<PotentiallyInactive>Not necessary</PotentiallyInactive>
<StatusCode>Live</StatusCode>
</InteractingIngredient>
</InteractingIngredients>
<ActiveProductsExistenceCode>Exist</ActiveProductsExistenceCode>
<IngredientTypeBasisCode>1</IngredientTypeBasisCode>
<AllergenMatch>Lactobacillus acidophilus</AllergenMatch>
<AllergenMatchType>Ingredient</AllergenMatchType>
</DALink>
<ScreenDrug>
<DrugID>1112894</DrugID>
<DrugConceptType>RxNorm_SemanticClinicalDr</DrugConceptType>
<DrugDesc>RxNorm LACTOBACILLUS ACIDOPHILUS/PECTIN ORAL capsule</DrugDesc>
<Prospective>true</Prospective>
</ScreenDrug>
この手順では、上記の XML 構造を調べて、存在しないはずのノードを削除するコードを使用しています。これは、クエリ出力を微調整するよりも xml を変更する方が簡単だからです。そのコードのサンプルを次に示します。
SET @xml_Out.modify('declare namespace ccxsd="http://schemas.foobar.com/CC/v1_3"; delete //ccxsd:InteractingIngredients[../../../ccxsd:ScreenDrug/ccxsd:DrugConceptType="OneThing"]');
SET @xml_Out.modify('declare namespace ccxsd="http://schemas.foobar.com/CC/v1_3"; delete //ccxsd:InteractingIngredients[../../../ccxsd:ScreenDrug/ccxsd:DrugConceptType="AnotherThing"]');
SET @xml_Out.modify('declare namespace ccxsd="http://schemas.foobar.com/CC/v1_3"; delete //ccxsd:InteractingIngredients[../../../ccxsd:ScreenDrug/ccxsd:DrugConceptType="SomethingElse"]');
SET @xml_Out.modify('declare namespace ccxsd="http://schemas.foobar.com/CC/v1_3"; delete //ccxsd:InteractingIngredients[../../../ccxsd:ScreenDrug/ccxsd:DrugConceptType="SomethingElseAgain"]');
SET @xml_Out.modify('declare namespace ccxsd="http://schemas.foobar.com/CC/v1_3"; delete //ccxsd:InteractingIngredients[../../../ccxsd:ScreenDrug/ccxsd:DrugConceptType="RxNorm*"]');
最後のコマンドは、どうすればうまくいくかわかりません。要素「DrugConceptType」が文字列「RxNorm」で始まるインスタンスを探すだけで済みます。文字列には複数のバージョンが存在する可能性があるためです。
私はグーグルで調べて StackOverFlowed しましたが、おそらくこの分野での経験が浅かったために、正しく質問できませんでした。
「RxNorm」の後にワイルドカードを使用するために、上記の最後の .modify ステートメントを書き直す比較的簡単な方法はありますか?