2012-04-20 40 views
0

我正在將插入和刪除的表中的數據捕獲爲xml並將其保存到審計日誌中,但由於某些原因開始生成空元素爲空值。這似乎違背它說的文檔:對於XML *,即使我沒有使用XSINIL,ELEMENTS也會生成空元素

元素指令構造XML,其中每一列值映射 在XML的元素。如果列值爲NULL,則沒有元素是 添加。通過在ELEMENTS 指令中指定可選的XSINIL參數,可以請求爲 NULL值創建一個元素。在這種情況下,將爲每個NULL列值返回一個具有設置爲TRUE的xsi:nil屬性 的元素。

我很確定我沒有使用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

可以顯示具有此行爲的查詢嗎?在某些情況下,當您在字段列表中進行子查詢時,最終會得到空標籤。 – 2012-04-20 18:50:08

+0

我無法重現您使用您在此發佈的代碼所看到的內容。我沒有得到空的元素。 – 2012-04-21 09:42:14

+0

這很奇怪。每次運行查詢時,我都可以重現該問題。當然,這是一個觸發器。我在觸發器之外運行了類似的查詢,它們的行爲與預期相同。 – 2012-04-23 13:24:17

回答

0

原來我測試過的表幾乎每一列(400+)都設置爲空字符串的默認約束,這導致這些列被包含在生成的xml中。

我測試過的其他表沒有這個默認約束,所以xml按預期生成。

相關問題