【发布时间】:2013-11-21 20:51:18
【问题描述】:
我有以下要转换为 XML 文件的 T-SQL 查询。我试图使用 FOR XML Path,但这不是我需要的方式。 这是我的 T-SQL 表定义:
create table TN_DataFeed
(
--Patient uniqueidentifier,
ProviderPatientNo varchar(50) null,
LastName varchar(25),
FirstName varchar(25),
SSN char(9) null,
DOB char(10) null,
Gender tinyint null,
Race tinyint null,
Ethnicity tinyint null,
--PhoneAssessment varchar(50),
ProviderPhoneAssessmentID varchar(50),
CallEndDate char(10),
CallEndTime varchar(8)
)
我的数据与上述格式匹配并成功插入。但我需要我的 XML 看起来像:
<Patient>
<ProviderPatientNo>ProviderPatientNo0</ProviderPatientNo>
<LastName>LastName0</LastName>
<FirstName>FirstName0</FirstName>
<SSN>000000000</SSN>
<DOB>2006-05-04</DOB>
<Gender>1</Gender>
<Race>1</Race>
<Ethnicity>1</Ethnicity>
<PhoneAssessment>
<ProviderPhoneAssessmentId>52854541</ProviderPhoneAssessmentId>
<CallEndDate>2006-05-04</CallEndDate>
<CallEndTime>01:01:01.001</CallEndTime>
</PhoneAssessment>
</Patient>
这是我用于检索上述 T-SQL 查询的 XML 路径代码:
select
ProviderPatientNo,
LastName,FirstName,SSN,DOB,Gender,Race,Ethnicity,
(
select distinct
ProviderPhoneAssessmentId, CallEndDate, CallEndTime
from TN_DataFeed
For XML path ('PhoneAssessment'), root('PhoneAssessment2'), type
)
from TN_DataFeed
For XML path ('Patient'), root('Patient_root'), type
请注意,我尚未包含所有列。相反,我只是想让患者部分正常工作。请注意,在下面的示例 XML 文件中,Patient 是 ProviderPatientNo、LastName、FirstName、SSN、DOB、Gender、Race 和 Ethnicity 的父节点的部分。
但是,我上面的 XML 路径的 XML 输出是:
<Patient_root>
<Patient>
<ProviderPatientNo>00200543</ProviderPatientNo>
<LastName>Ga</LastName>
<FirstName>Ti</FirstName>
<SSN>4108</SSN>
<DOB>1998-08-16</DOB>
<Gender>2</Gender>
<Race>2</Race>
<Ethnicity>3</Ethnicity>
<PhoneAssessment2>
<PhoneAssessment>
<ProviderPhoneAssessmentId>BEA5487B-82E9-4226-B883-BFBFE7EF2B1A</ProviderPhoneAssessmentId>
<CallEndDate>2013-09-16</CallEndDate>
<CallEndTime>22:00:00</CallEndTime>
</PhoneAssessment>
<PhoneAssessment>
<ProviderPhoneAssessmentId>C8F39E2F-BC4A-48AD-BD07-C07EB8384AD7</ProviderPhoneAssessmentId>
<CallEndDate>2013-09-16</CallEndDate>
<CallEndTime>16:24:00</CallEndTime>
</PhoneAssessment>
</PhoneAssessment2>
</Patient>
<Patient>
<ProviderPatientNo>00200543</ProviderPatientNo>
<LastName>Ga</LastName>
<FirstName>Ti</FirstName>
<SSN>4108</SSN>
<DOB>1998-08-16</DOB>
<Gender>2</Gender>
<Race>2</Race>
<Ethnicity>3</Ethnicity>
<PhoneAssessment2>
<PhoneAssessment>
<ProviderPhoneAssessmentId>BEA5487B-82E9-4226-B883-BFBFE7EF2B1A</ProviderPhoneAssessmentId>
<CallEndDate>2013-09-16</CallEndDate>
<CallEndTime>22:00:00</CallEndTime>
</PhoneAssessment>
<PhoneAssessment>
<ProviderPhoneAssessmentId>C8F39E2F-BC4A-48AD-BD07-C07EB8384AD7</ProviderPhoneAssessmentId>
<CallEndDate>2013-09-16</CallEndDate>
<CallEndTime>16:24:00</CallEndTime>
</PhoneAssessment>
</PhoneAssessment2>
</Patient>
所以问题是:
许多元素是重复的。我尝试使用 Distinct 来限制重复,但这导致了错误:
xml 数据类型不能选择为 DISTINCT,因为它不是 可比。
【问题讨论】:
-
您要求的 XML 和表很难阅读。您能否以一种更简单且容易对应于您稍后显示的问题的输出的方式进行格式化?我们知道在实际案例中您会有更多的列,但对于这个问题,一个简单的例子可能会更好。
-
Preet,你能再检查一下吗?我现在更新了我的描述。
-
好的:我注意到的第一件事是您查询的是 information_schema 而不是实际的表,所有这些都为您提供了表模式元数据。你能改变你的查询来查询表格吗?
SELECT ... FROM TN_DataFeed,然后更改您的问题以反映该查询和该输出。看这个例子:technet.microsoft.com/en-us/library/bb510462.aspx
标签: sql-server xml tsql path