2017-07-03 79 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