0

私はこのようなXMLを持っており、SQLサーバーの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 に答える