这是我的样本xml
<NewDataSet>
<Employee>
<EmpID>1005</EmpID>
<Name> keith </Name>
<DOB>12/02/1981</DOB>
<Salary>10,500</Salary>
</Employee>
</NewDataSet>
从那里我想提取数据并以这种方式存储在字符串变量中
SET @Data='EmpID=1005,Name='Keith',DOB='12/02/1981',Salary=10,500'
所以告诉我从xml中提取数据的方法,并按照我想要的方式重新排列或存储字符串变量中的数据,但请给我建议的sql,这应该适用于不同的或任何xml模板。寻找想法。感谢
答案 0 :(得分:1)
DECLARE @xmlVar AS XML
DECLARE @vcRow AS VARCHAR(500)
SET @xmlVar ='<NewDataSet>
<Employee>
<EmpID>1005</EmpID>
<Name> keith </Name>
<DOB>12/02/1981</DOB>
<Salary>10,500</Salary>
</Employee>
</NewDataSet>'
;with yourDataSet
AS (
SELECT
t.u.value('EmpID[1]','INT') AS EmpID
,t.u.value('Name[1]','VARCHAR(50)') AS Name
,t.u.value('DOB[1]','DATE') AS DOB
,t.u.value('Salary[1]','MONEY') AS Salary
FROM
@xmlVar.nodes('/NewDataSet/Employee') AS t(u) )
SELECT
/*@vcRow = */'EmpID='+ CAST(EmpID AS VARCHAR(50)) +',' +
'Name='''+Name +''',DOB=''' + CONVERT(VARCHAR(10),DOB,110) + ''',Salary='+CAST(Salary AS VARCHAR(50))
FROM
yourDataSet
答案 1 :(得分:1)
这样的事情会起作用。该查询提取所有Employee子节点并连接到字符串。该脚本仅在@tbl中只有一行时才有效,但它只是说明了获取所需字符串的方法。它也不是通用的,我想象的要困难得多。
DECLARE @tbl TABLE(data XML NOT NULL);
INSERT INTO @tbl(data)VALUES('<NewDataSet>
<Employee>
<EmpID>1005</EmpID>
<Name> keith </Name>
<DOB>12/02/1981</DOB>
<Salary>10,500</Salary>
</Employee>
</NewDataSet>');
DECLARE @data VARCHAR(4000);
SELECT
@data =
'EmpID=' + N.T.value('EmpID[1]','VARCHAR(512)') + ',' +
'Name=''' + N.T.value('Name[1]','VARCHAR(512)') + ''',' +
'DOB=''' + N.T.value('DOB[1]','VARCHAR(512)') + ''',' +
'Salary=' + N.T.value('Salary[1]','VARCHAR(512)')
FROM
@tbl AS t
CROSS APPLY t.data.nodes('//Employee') AS N(T)
PRINT @data;