由于命名空间,简单的XQuery无法正常工作

时间:2018-01-26 15:42:40

标签: sql-server xml xquery xml-namespaces

我有一个xml文档:

<ns0:Employee xmlns:ns0="http://namespace">
  <EmployeeID></EmployeeID>
  <Department></Department>
  <FirstName> </FirstName>
  <MiddleInitial />
  <LastName></LastName>
  <IsActive></IsActive>
  <CreateDate>2017-07-25T14:18:14.513</CreateDate>
  <UpdateDate>2018-01-25T16:58:52.733</UpdateDate>
  <PrimaryRole></PrimaryRole>
  <TempPassword></TempPassword>
  <License></License>
  <AccessLevelID></AccessLevelID>
  <CompanyID></CompanyID>
  <Schedule></Schedule>
</ns0:Employee>

我正在尝试从中获取CreateDate和UpdateDates。我尝试了以下内容:

select
  [xmlcolumn].value('(/Employee/CreateDate)[1]', 'varchar(max)') as CreateDate
from
  table

但是这总是返回一个空值,尽管有一个CreateDate。如果我从xml文档中删除命名空间,我的查询将返回CreateDate。

1 个答案:

答案 0 :(得分:3)

您的查询未包含命名空间。您可以这样做以包含命名空间:

select
  [xmlcolumn].value('declare namespace ns0="http://namespace";(/ns0:Employee/CreateDate)[1]', 'varchar(max)') as CreateDate
from
  table

或者只是使用这个

select
  [xmlcolumn].value('(/*/CreateDate)[1]', 'varchar(max)') as CreateDate
from
  table