1

SQLServerでXQueryとXpathを学習しようとしています

サンプルファイルを作成し、2列IDのXMLDocを持つテーブルにアップロードしました。以下のコードはXMLDoc列のドキュメント内にあるため、この列の唯一のレコードです。

通常のselectステートメントのようにすべての結果がテーブルに表示されるようにファイルをクエリしようとしています。select *のようにすべての情報を選択するために、selectステートメントをどのように作成しますか?すべてのサプライヤーのように、どのように1つのフィールドを選択しますか?各品目のサプライヤー、リクエスターを選択したいと思います。

xmlは次のとおりです。

     <tst:Document xmlns:tst ="http://www.w3.org/2001/XMLSchema" SchemaVersion="0.1" Classification="Test" UniqueIdentifier="1234" Title="Test">
  <tst:Revision RevNumber="0" TimeStamp="2013-01-21T12:56:00">
    <tst:Author Name="Me" Guid="1234" />
  </tst:Revision>
  <tst:Formats>
    <tst:A12 Item="1">
      <tst:Requestor Name="ADC" />
      <tst:Supplier Name="BBC" />
      <tst:Code>B</tst:Code>
      <tst:IsRequirement>true</tst:IsRequirement>
      <tst:IsNotRequired>false</tst:IsInformation>
      <tst:Remarks>ADC (Random Input Section)</tst:Remarks>
      <tst:Notes>Next Round.</tst:Notes>
      <tst:Events>
        <tst:SubTest Item="0">
          <tst:BLDG>BLDG1</tst:BLDG>
          <tst:BLDG2>BLDG2</tst:BLDG2>
          <tst:Function>Testing</tst:Function>
          <tst:Desciption>Normal Flow</tst:Desciption>
        </tst:SubTest>
      </tst:Events>
      <tst:IsReady>true</tst:IsReady>
      <tst:IsNotReady>false</tst:IsNotReady>
    </tst:A12>
    <tst:A12 Item="2">
      <tst:Requestor Name="ADC" />
      <tst:Supplier Name="BBC" />
      <tst:Code>A</tst:Code>
      <tst:IsRequirement>true</tst:IsRequirement>
      <tst:IsInformation>false</tst:IsInformation>
      <tst:Remarks>Requirement Not yet met.</tst:Remarks>
      <tst:Notes>Ready.</tst:Notes>
      <tst:Events>
        <tst:SubTest Item="0">
          <tst:BLDG>BLDG3</tst:BLDG>
          <tst:BLDG2>BLDG4</tst:BLDG2>
          <tst:TotalEvents>1</tst:TotalEvents>
          <tst:Function>Development</tst:Function>
          <tst:Desciption>Process Flow</tst:Desciption>
        </tst:SubTest>
      </tst:Events>
      <tst:IsReady>true</tst:IsReady>
      <tst:IsNotReady>false</tst:IsNotReady>
    </tst:A12>
  </tst:Formats>
</tst:Document>

実行したクエリ

返品がありましたが、まだxml形式で表示されています。

Select XMLDoc.query('/*/*/*/*[local-name()=("Requestor", "Supplier")]')
       From XMLLoad

xmlスニペットを更新しました。sryにタイプミスがありました。今すぐロードします

INSERT INTO TableName(ColumnName)
SELECT * FROM OPENROWSET(
BULK 'C:\Users\Filepath.xml',
SINGLE_BLOB) AS x;
4

2 に答える 2

0

value()nodes( )を確認してください。

于 2013-01-21T21:58:20.853 に答える
0

SQLフィドル

MS SQL Server 2008スキーマのセットアップ

create table XMLDoc (XMLLoad xml);

insert into XMLDoc(XMLLoad) values('
     <tst:Document xmlns:tst ="http://www.w3.org/2001/XMLSchema" SchemaVersion="0.1" Classification="Test" UniqueIdentifier="1234" Title="Test">
  <tst:Revision RevNumber="0" TimeStamp="2013-01-21T12:56:00">
    <tst:Author Name="Me" Guid="1234" />
  </tst:Revision>
  <tst:Formats>
    <tst:A12 Item="1">
      <tst:Requestor Name="ADC" />
      <tst:Supplier Name="BBC" />
      <tst:Code>B</tst:Code>
      <tst:IsRequirement>true</tst:IsRequirement>
      <tst:IsInformation>false</tst:IsInformation>
      <tst:Remarks>ADC (Random Input Section)</tst:Remarks>
      <tst:Notes>Next Round.</tst:Notes>
      <tst:Events>
        <tst:SubTest Item="0">
          <tst:BLDG>BLDG1</tst:BLDG>
          <tst:BLDG2>BLDG2</tst:BLDG2>
          <tst:Function>Testing</tst:Function>
          <tst:Desciption>Normal Flow</tst:Desciption>
        </tst:SubTest>
      </tst:Events>
      <tst:IsReady>true</tst:IsReady>
      <tst:IsNotReady>false</tst:IsNotReady>
    </tst:A12>
    <tst:A12 Item="2">
      <tst:Requestor Name="ADC" />
      <tst:Supplier Name="BBC" />
      <tst:Code>A</tst:Code>
      <tst:IsRequirement>true</tst:IsRequirement>
      <tst:IsInformation>false</tst:IsInformation>
      <tst:Remarks>Requirement Not yet met.</tst:Remarks>
      <tst:Notes>Ready.</tst:Notes>
      <tst:Events>
        <tst:SubTest Item="0">
          <tst:BLDG>BLDG3</tst:BLDG>
          <tst:BLDG2>BLDG4</tst:BLDG2>
          <tst:TotalEvents>1</tst:TotalEvents>
          <tst:Function>Development</tst:Function>
          <tst:Desciption>Process Flow</tst:Desciption>
        </tst:SubTest>
      </tst:Events>
      <tst:IsReady>true</tst:IsReady>
      <tst:IsNotReady>false</tst:IsNotReady>
    </tst:A12>
  </tst:Formats>
</tst:Document>');

クエリ1

with xmlnamespaces('http://www.w3.org/2001/XMLSchema' as tst)
select A12.X.value('@Item', 'int') as A12,
       A12.X.value('tst:Requestor[1]/@Name', 'varchar(25)')        as Requestor,
       A12.X.value('tst:Supplier[1]/@Name', 'varchar(25)')         as Supplier,
       A12.X.value('(tst:Code/text())[1]', 'varchar(25)')          as Code,
       A12.X.value('(tst:IsRequirement/text())[1]', 'bit')         as IsRequirement,
       A12.X.value('(tst:IsInformation/text())[1]', 'bit')         as IsInformation,
       A12.X.value('(tst:Remarks/text())[1]', 'varchar(50)')       as Remarks,
       A12.X.value('(tst:Notes/text())[1]', 'varchar(50)')         as Notes,
       ST.X.value('@Item', 'int')                                  as SubTest,
       ST.X.value('(tst:BLDG/text())[1]', 'varchar(25)')           as BLDG,
       ST.X.value('(tst:BLDG2/text())[1]', 'varchar(25)')          as BLDG2,
       ST.X.value('(tst:TotalEvents/text())[1]', 'int')            as TotalEvents,
       ST.X.value('(tst:Function/text())[1]', 'varchar(25)')       as [Function],
       ST.X.value('(tst:Desciption/text())[1]', 'varchar(50)')     as Desciption
from XMLDoc as X
  cross apply X.XMLLoad.nodes('/tst:Document/tst:Formats/tst:A12') as A12(X)
  cross apply A12.X.nodes('tst:Events/tst:SubTest')                as ST(X)

結果

| A12 | REQUESTOR | SUPPLIER | CODE | ISREQUIREMENT | ISINFORMATION |                    REMARKS |       NOTES | SUBTEST |  BLDG | BLDG2 | TOTALEVENTS |    FUNCTION |   DESCIPTION |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   1 |       ADC |      BBC |    B |             1 |             0 | ADC (Random Input Section) | Next Round. |       0 | BLDG1 | BLDG2 |      (null) |     Testing |  Normal Flow |
|   2 |       ADC |      BBC |    A |             1 |             0 |   Requirement Not yet met. |      Ready. |       0 | BLDG3 | BLDG4 |           1 | Development | Process Flow |
于 2013-01-22T07:40:15.220 に答える