sql >> データベース >  >> RDS >> Sqlserver

SQLXML値をフェッチするためのXPath

    更新

    私の推奨事項は、XMLをリレーションに細断し、XML内の特定のノードを検索する手続き的な方法ではなく、セット指向の方法で、結果のリレーションを検索して結合することです。対象のノードと属性を細断処理す​​る単純なXMLクエリは次のとおりです。

    select x.value(N'../../../../@stepId', N'int') as StepID
      , x.value(N'../../@id', N'int') as ComponentID
      , x.value(N'@nom',N'nvarchar(100)') as Nom
      , x.value(N'@valeur', N'nvarchar(100)') as Valeur
    from @x.nodes(N'/xml/box/components/component/variables/variable') t(x)
    

    ただし、対象の値を正確に取得するXPathを使用する必要がある場合:

    select x.value(N'@valeur', N'nvarchar(100)') as Valeur
    from @x.nodes(N'/xml/box[@stepId=sql:variable("@stepID")]/
        components/component[@id = sql:variable("@componentID")]/
           variables/variable[@nom="Enabled"]') t(x)
    

    stepIDとコンポーネントIDが変数ではなく列である場合、XPathフィルターでsql:variableの代わりにsql:column()を使用する必要があります。 XMLデータ内のリレーショナルデータのバインド を参照してください。 。

    最後に、存在を確認するだけでよい場合は、 excist(を使用できます。 ) XMLメソッド:

    select @x.exist(
      N'/xml/box[@stepId=sql:variable("@stepID")]/
        components/component[@id = sql:variable("@componentID")]/
          variables/variable[@nom="Enabled" and @valeur="Yes"]') 
    


    1. 1つのphpページで2つのテーブルを使用する(mysql)

    2. SQLで別のテーブルから1つのテーブルを作成する方法

    3. MySQLでSELECTDISTINCTとUNIONDISTINCTを組み合わせる-効果はありますか?

    4. データストレージ:アーカイブおよびHSMのRESTとPOSIX