如何在SQL Server 2008中读取XML列?

时间:2014-04-01 10:31:04

标签: sql sql-server xml sql-server-2008

我从未在SQL Server 2008中使用过XML,我需要将字段列表提取到变量表中,你是怎么做到的?

鉴于我在XMLMain表中有一个名为xmldata的列,如下所示,如何在sql中提取字段列表?

![在此处输入图片说明] [1]

<?mso-infoPathSolution name="urn:schemas-microsoft-com:office:infopath:SampleForm:-myXSD-2014-03-29T09-41-23" solutionVersion="1.0.0.18" productVersion="15.0.0.0" PIVersion="1.0.0.0" href="http://bipc20/sites/team-1303/FormServerTemplates/SampleForm.xsn"?>
<?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.4"?>
<my:myFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2014-03-29T09:41:23" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-US">
<my:field1>1</my:field1>
<my:field2>2</my:field2>
<my:field3>true</my:field3>
<my:field4 xsi:nil="true" />
<my:field5 xsi:nil="true" />
<my:field6>4</my:field6>
<my:FormName>2014-04-01T15:11:47</my:FormName>
<my:Repeating>hi</my:Repeating>
<my:Repeating xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2014-03-29T09:41:23">hello</my:Repeating>
<my:Repeating xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2014-03-29T09:41:23">how are  you?</my:Repeating>
</my:myFields>

我想以逗号分隔的方式提取重复字段的值,就像ex一样。在重复中我们有三个值(嗨,你好,你好吗?)

任何人都可以帮助我。?

1 个答案:

答案 0 :(得分:1)

with xmlnamespaces('http://schemas.microsoft.com/office/infopath/2003/myXSD/2014-03-29T09:41:23' as my)
select M.XMLData.value('(/my:myFields/my:field1/text())[1]', 'int') as field1,
       M.XMLData.value('(/my:myFields/my:field2/text())[1]', 'int') as field2,
       M.XMLData.value('(/my:myFields/my:field3/text())[1]', 'bit') as field3,
       M.XMLData.value('(/my:myFields/my:FormName/text())[1]', 'datetime') as FormName,
       (
         select ','+R.X.value('text()[1]', 'nvarchar(max)')
         from M.XMLData.nodes('/my:myFields/my:Repeating') as R(X)
         for xml path(''), type
       ).value('substring(text()[1], 2)', 'nvarchar(max)') as Repeating
from XMLMain as M

结果:

field1      field2      field3 FormName                Repeating
----------- ----------- ------ ----------------------- -----------------------
1           2           1      2014-04-01 15:11:47.000 hi,hello,how are  you?