0

挿入および削除されたテーブルからデータを xml としてキャプチャし、監査ログに保存していますが、何らかの理由で null 値に対して空の要素が生成され始めます。これは、次のようなドキュメントと矛盾しているようです。

ELEMENTS ディレクティブは、各列の値が XML の要素にマップされる XML を構築します。列の値が NULL の場合、要素は追加されません。ELEMENTS ディレクティブでオプションの XSINIL パラメータを指定することにより、NULL 値に対しても要素を作成するように要求できます。この場合、xsi:nil 属性が TRUE に設定された要素が、各 NULL 列値に対して返されます。

XSINIL パラメータを使用していないことは確かですが、要素はすべて同じように作成されています。生成モードで遊んでみました。RAW、AUTO などを試しますが、空のタグは関係なく残ります。

次のような動的に生成されたクエリです。

'SET @LogData =
        CASE
            WHEN @EventType = @Insert
            THEN
            (
                SELECT ' + @ColumnList + '
                FROM Inserted
                FOR XML RAW, ELEMENTS
            )
            WHEN @EventType = @Delete
            THEN
            (
                SELECT ' + @ColumnList + '
                FROM Deleted Rows
                FOR XML RAW, ELEMENTS
            )                           
        END;'

@LogData のタイプxmlと @ColumnList の形式は次のとおりです。

[Column1Name],
[Column2Name]
4

1 に答える 1

0

私がテストしていたテーブルでは、ほぼすべての列 (400 以上) が空の文字列の既定の制約に設定されていたため、生成された xml にそれらの列が含まれていました。

私がテストした他のテーブルには、このデフォルトの制約がなかったため、期待どおりに xml が生成されました。

于 2012-04-23T15:08:37.300 に答える