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

T-SQL でテキストのない XML フィールドを更新する

    このノード (/filemeta/description/text())[1] XML には存在しないため、置き換えるものはありません。代わりに挿入を行う必要があります。空のノードと値を持つノードが混在しているシナリオがある場合は、2 つの更新ステートメントを実行する必要があります。

    declare @filemetaDB table(filemeta xml)
    
    insert into @filemetaDB values
    ('<filemeta><description>Not empty</description></filemeta>'), -- Not empty node
    ('<filemeta><description/></filemeta>'),                       -- Empty node
    ('<filemeta></filemeta>')                                      -- Missing node
    
    -- Replace value for nodes with value
    update @filemetaDB
    set filemeta.modify('replace value of (/filemeta/description/text())[1] with "TEST 1"')
    where filemeta.exist('/filemeta/description/text()') = 1
    
    -- Add text node for empty nodes
    update @filemetaDB
    set filemeta.modify('insert text{"TEST 2"} into (/filemeta/description)[1]')
    where filemeta.exist('/filemeta/description/text()') = 0
    
    select *
    from @filemetaDB
      

    結果:

    <前>filemeta ------------------------------------------------------ <filemeta><description>TEST 1</description></filemeta> <filemeta><description>TEST 2</description></filemeta> <filemeta />

    1. SQLSelectシンボルとは||平均?

    2. mysqlクエリ-出力の日付をフォーマットしますか?

    3. 致命的なエラー:オブジェクトコンテキストにないときに$thisを使用する

    4. なぜ外部キーを使用する必要があるのですか?