0

我有这样的 XML,存储在 sql server 的 XML 字段中:

<TableSpec
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns="custom_schema_name"
   ID="66912703-1201-457C-A37B-84D446B6C043"
   Name="Some name"
 >
  <Fields>
    <ForeignKeyField Name="SOMETABLEID" Required="true" ForeignTable="SOMETABLE"/>
    <GuidField Name="FIELD1" Required="true" />
    <DateField Name="FIELD2" Required="true" />
  </Fields>
</TableSpec>

我想选择不是外键字段的每个字段的“名称”。

鉴于这个例子,我希望我的结果集是:

FIELD1
FIELD2

我怎样才能做到这一点?

4

1 回答 1

1

这是一些伪代码。您必须针对您的特定样本进行修改。

编辑:我修改了代码以反映您的命名空间。

declare @x xml
set @x = 
'<TableSpec
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns="custom_schema_name"
   ID="66912703-1201-457C-A37B-84D446B6C043"
   Name="Some name">
  <Fields>
    <ForeignKeyField Name="SOMETABLEID" Required="true" ForeignTable="SOMETABLE"/>
    <GuidField Name="FIELD1" Required="true" />
    <DateField Name="FIELD2" Required="true" />
  </Fields>
</TableSpec>'

;WITH XMLNAMESPACES ('custom_schema_name' as custom_schema_name)
select
    x.i.value('@Name','varchar(256)'),
    x.i.value('local-name(.)','varchar(256)')
from @x.nodes('/custom_schema_name:TableSpec/custom_schema_name:Fields/*') x(i)
where x.i.value('local-name(.)','varchar(256)') <> 'ForeignKeyField'
于 2013-07-11T20:30:58.183 回答