2

我在 SQL Server的表中有一个xml列。这就是我的 xml 的样子:Formdatapt_formdata

<?csps doctype="dataset" version="1.0.0"?> 
<csps:root formtype="AFTeleIntake" guid="ecde2347-ae24-4bd0-a4bd-60e11ca38ed9" xmlns:csps="http://tempuri.org/AFTeleIntake.xsd">
 <Questions>
  <row>
   <ReferringProvider>Abc</ReferringProvider> 
   <PrimaryCareProvider>Bcd</PrimaryCareProvider> 
   <TelephoneContactDate>07-Nov-2013</TelephoneContactDate> 
   <AFType>type1</AFType> 
  </row>
 </Questions>
</csps:root>

我想创建一个 SQL 查询来AFType从这个 xml 列中获取。我对 SQL Server 很陌生,我尝试了很多功能。

例如:

SELECT 
   PT_FormData.Formdata.query('declare namespace x="http://tempuri.org/AFTeleIntake.xsd";
      (/x:csps/x:Questions/x:row/x:AFType)') AS Description 
FROM database.[dbo].[PT_FormData]

但输出列是空的。我怎样才能绕过我想要的?

任何帮助将不胜感激

谢谢蒂娜

4

2 回答 2

1

试试这个:

;WITH XMLNAMESPACES('http://tempuri.org/AFTeleIntake.xsd' AS csps)
SELECT
    Formdata.value('(/csps:root/Questions/row/AFType)[1]', 'varchar(50)')
FROM 
  PT_FormData
于 2013-11-08T20:26:55.877 回答
0

这是有关如何从上述案例中获取 AFType 的示例:

DECLARE @x XML
SET @x = '<?csps doctype="dataset" version="1.0.0"?> 
<csps:root formtype="AFTeleIntake" guid="ecde2347-ae24-4bd0-a4bd-60e11ca38ed9" xmlns:csps="http://tempuri.org/AFTeleIntake.xsd">
 <Questions>
  <row>
   <ReferringProvider>Abc</ReferringProvider> 
   <PrimaryCareProvider>Bcd</PrimaryCareProvider> 
   <TelephoneContactDate>07-Nov-2013</TelephoneContactDate> 
   <AFType>type1</AFType> 
  </row>
  <row>
   <ReferringProvider>Abc</ReferringProvider> 
   <PrimaryCareProvider>Bcd</PrimaryCareProvider> 
   <TelephoneContactDate>07-Nov-2013</TelephoneContactDate> 
   <AFType>type2</AFType> 
  </row>
 </Questions>
</csps:root>'


select t.c.value('AFType[1]', 'varchar(50)')
from @x.nodes('declare namespace csps="http://tempuri.org/AFTeleIntake.xsd"; csps:root/Questions/row') t(c)
于 2013-11-08T20:23:04.507 回答