我将插入和删除的表中的数据作为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]
答案 0 :(得分:0)
原来我测试的表几乎每列(400+)都设置为空字符串的默认约束,这导致这些列包含在生成的xml中。
我测试的其他表没有此默认约束,因此xml按预期生成。