0

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

ELEMENTS 指令构造 XML,其中每个列值映射到 XML 中的一个元素。如果列值为 NULL,则不添加任何元素。通过在 ELEMENTS 指令上指定可选的 XSINIL 参数,您可以请求也为 NULL 值创建一个元素。在这种情况下,将为每个 NULL 列值返回一个将 xsi:nil 属性设置为 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]
4

1 回答 1

0

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

我测试的其他表没有这个默认约束,所以 xml 是按预期生成的。

于 2012-04-23T15:08:37.300 回答