对于XML *,即使我没有使用XSINIL,ELEMENTS也会为空值生成空元素

时间:2012-04-20 16:32:59

标签: sql-server xml

我将插入和删除的表中的数据作为xml捕获并保存到审计日志中,但由于某种原因,空元素开始为空值生成。这似乎与文件相矛盾:

  

ELEMENTS指令构造每个列值映射的XML   到XML中的元素。如果列值为NULL,则没有元素   加入即可。通过在ELEMENTS上指定可选的XSINIL参数   指令,您可以请求也为该元素创建一个元素   NULL值。在这种情况下,具有xsi:nil属性的元素   为每个NULL列值返回设置为TRUE。

我很确定我没有使用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]

1 个答案:

答案 0 :(得分:0)

原来我测试的表几乎每列(400+)都设置为空字符串的默认约束,这导致这些列包含在生成的xml中。

我测试的其他表没有此默认约束,因此xml按预期生成。