[英]Import XML to SQL table and format data
有人可以幫助我,我正在嘗試將xml文件導入sql服務器表。 我可以導入所需的數據,但是在以所需的格式獲取數據時遇到了一些麻煩。
declare @input XML = '<Sub>
<Results>
<Result>
<ids>
<id>
<type>code</type>
<value>9004a3d2</value>
</id>
<id>
<type>username</type>
<value>jbloggs001</value>
<date>20160725</date>
</id>
<id>
<type>EmployeeID</type>
<value>01234</value>
<date>20160725</date>
</id>
</ids>
</Result>
</Results>
</Sub>'
SELECT
datatype = XCol.value('(type)[1]','varchar(25)'),
datavalue = XCol.value('(value)[1]','varchar(50)')
FROM
@input.nodes('/Sub/Results/Result/ids/id') AS XTbl(XCol)
這給出了3列,例如:
datatype datavalue
--------------------------------
code 9004a3d2
username jbloggs001
employeeID 01234
可以將其導入為嗎?
EmployeeID USername Code
---------------------------------
01234 jbloggs 0019004a3d2
謝謝
正如使用PIVOT可以完成的注釋中所建議的那樣:
SELECT *
FROM (
SELECT
datatype = XCol.value('(type)[1]','varchar(25)'),
datavalue = XCol.value('(value)[1]','varchar(50)')
FROM
@input.nodes('/Sub/Results/Result/ids/id') AS XTbl(XCol)
) as p
PIVOT (
MAX(datavalue) FOR datatype IN (EmployeeID,username,code)
) as pvt
輸出:
EmployeeID username code
01234 jbloggs001 9004a3d2
如果輸入始終是相同type
s:
SELECT XCol.value('(id/value)[3]','varchar(50)') as EmployeeID,
XCol.value('(id/value)[2]','varchar(50)') as username,
XCol.value('(id/value)[1]','varchar(50)') as code
FROM @input.nodes('/Sub/Results/Result/ids') AS XTbl(XCol)
以下查詢適用於您的解決方案
Select [EmployeeID],[Username],[Code]
FROM #TEMP
PIVOT
(
MAX(DATAVALUE) FOR DATATYPE IN (code,username,employeeID)
)A
另一個選擇是XQuery包含功能
declare @input XML = '<Sub>
<Results>
<Result>
<ids>
<id>
<type>code</type>
<value>9004a3d2</value>
</id>
<id>
<type>username</type>
<value>jbloggs001</value>
<date>20160725</date>
</id>
<id>
<type>EmployeeID</type>
<value>01234</value>
<date>20160725</date>
</id>
</ids>
</Result>
</Results>
</Sub>';
SELECT
code = XCol.value('(id[contains((./type)[1],"code")]/value)[1]','varchar(50)'),
username = XCol.value('(id[contains((./type)[1],"username")]/value)[1]','varchar(50)'),
EmployeeID = XCol.value('(id[contains((./type)[1],"EmployeeID")]/value)[1]','varchar(50)')
FROM
@input.nodes('/Sub/Results/Result/ids') AS XTbl(XCol);
另一個非常直接且類型安全的方法是:
SELECT id.value('(id[type="code"]/value)[1]','varchar(max)') AS code
,id.value('(id[type="username"]/value)[1]','varchar(max)') AS username
,id.value('(id[type="EmployeeID"]/value)[1]','varchar(max)') AS EmployeeID
FROM @input.nodes('Sub/Results/Result/ids') AS A(id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.