2017-07-03 82 views
0

我將數據存儲在名爲'Audit'的AuditTable中,其中名爲'audit'的審計列以XML格式存儲了數據。以下是XML格式數據的格式。通過SQL Server進行XML解析

<audit><Item CreatedDate="0001-01-01T00:00:00.0000000Z" TypeOfData="UserName" PreviousValue="David" NewValue="Harry"></Item></Audit> 

請幫我從這個XML數據中獲取CreatedDate,PreviousValue和NewValue。

在此先感謝。

回答

0

嘗試這樣的事情

DECLARE @xml XML ='<Audit><Item CreatedDate="0001-01-01T00:00:00.0000000Z" TypeOfData="UserName" PreviousValue="David" NewValue="Harry"></Item></Audit>' 

SELECT CreatedDate = T.value('@CreatedDate', 'varchar(100)'), 
     PreviousValue = T.value('@PreviousValue', 'varchar(100)'), 
     NewValue = T.value('@NewValue', 'varchar(100)') 
FROM @xml.nodes('/Audit/Item') tc (T) 

注:還有就是你的樣品xml在一個錯誤。開始標記(audit)和結束標記(Audit)不匹配我已修復它。

更新:從表使用提取XML數據Cross Apply

CREATE TABLE #Audit (audit XML) 

INSERT INTO #Audit 
VALUES  ('<Audit><Item CreatedDate="0001-01-01T00:00:00.0000000Z" TypeOfData="UserName" PreviousValue="David" NewValue="Harry"></Item></Audit>') 

SELECT CreatedDate = T.value('@CreatedDate', 'varchar(100)'), 
     PreviousValue = T.value('@PreviousValue', 'varchar(100)'), 
     NewValue = T.value('@NewValue', 'varchar(100)') 
FROM #Audit 
     CROSS apply audit.nodes('/Audit/Item') tc (T) 
+0

感謝固定我的錯誤。我需要一個解決方案,我可以直接從表格中提取記錄,將值分配給變量,然後從我完成的解析中解析出來。你能幫我嗎? – Prasad

+0

@Prasad - 完成.. –

+0

感謝您的回答。有效。我只是有一個查詢,我不能直接在我的基礎表上使用它?我相信這是行不通的,因爲存儲在我的基表下的數據是以nvarchar格式存儲的。 – Prasad