2

こんにちは、私は XML ファイルを使用する
のが初めてです。ファイル ICD.xml を
このような SQL テーブル XML ファイル形式に挿入しようとしました

   <letter>
<title>#</title>
<mainTerm>
  <title>1-propanol</title>
  <cell col="2">T51.3X1</cell>
  <cell col="3">T51.3X2</cell>
  <cell col="4">T51.3X3</cell>
  <cell col="5">T51.3X4</cell>
  <cell col="6">--</cell>
  <cell col="7">--</cell>
</mainTerm>
<mainTerm>
  <title>2-propanol</title>
  <cell col="2">T51.2X1</cell>
  <cell col="3">T51.2X2</cell>
  <cell col="4">T51.2X3</cell>
  <cell col="5">T51.2X4</cell>
  <cell col="6">--</cell>
  <cell col="7">--</cell>
</mainTerm>

私はこのコードを使用します

Declare @xml XML

Select  @xml  = CONVERT(XML,bulkcolumn,2) FROM OPENROWSET(BULK 'File Path',SINGLE_BLOB) AS X

SET ARITHABORT ON 
Insert into dbo.TestXML
    (
        C1,C3,C4,C5,C6,C7
    )


Select 
    p.value('C1[1]','VARCHAR(100)') AS C1,
    P.value('C2[1]','VARCHAR(100)') AS C2,
    P.value('C3[1]','VARCHAR(100)') AS C3,
    P.value('C4[1]','VARCHAR(100)') AS C4,
    P.value('C5[1]','VARCHAR(100)') AS C5,
    P.value('C6[1]','VARCHAR(100)') AS C6,
    P.value('C7[1]','VARCHAR(100)') AS C7,

From @xml.nodes('/letter/title') PropertyFeed(P)

しかし、構文にエラーがあります。助けてもらえますか。別の方法があればthnx

4

1 に答える 1

1
  1. 終了要素「文字」を追加します
  2. INSERT ステートメントに列 C2 を追加します。
  3. 列リストの最後の列の後のコンマを削除します
  4. メソッド内の XQuery を nodes('/letter/mainTerm') に変更します
  5. .value メソッドで各値の条件を追加します

--

IF OBJECT_ID('dbo.TestXML') IS NOT NULL DROP TABLE dbo.TestXML
CREATE TABLE dbo.TestXML
 (
  C1 varchar(10),
  C2 varchar(10),
  C3 varchar(10),
  C4 varchar(10),
  C5 varchar(10),
  C6 varchar(10),
  C7 varchar(10)
  )

DECLARE @xml xml = 
  '<letter>
    <title>#</title>
    <mainTerm>
      <title>1-propanol</title>
      <cell col="2">T51.3X1</cell>
      <cell col="3">T51.3X2</cell>
      <cell col="4">T51.3X3</cell>
      <cell col="5">T51.3X4</cell>
      <cell col="6">--</cell>
      <cell col="7">--</cell>
    </mainTerm>
    <mainTerm>
      <title>2-propanol</title>
      <cell col="2">T51.2X1</cell>
      <cell col="3">T51.2X2</cell>
      <cell col="4">T51.2X3</cell>
      <cell col="5">T51.2X4</cell>
      <cell col="6">--</cell>
      <cell col="7">--</cell>
    </mainTerm>
   </letter>'

INSERT dbo.TestXML(C1, C2, C3, C4, C5, C6, C7)
SELECT p.value('(title)[1]', 'VARCHAR(100)') AS C1,
       p.value('(cell)[@col=2][1]','VARCHAR(100)') AS C2,
       p.value('(cell)[@col=3][1]','VARCHAR(100)') AS C3,
       p.value('(cell)[@col=4][1]','VARCHAR(100)') AS C4,
       p.value('(cell)[@col=5][1]','VARCHAR(100)') AS C5,
       p.value('(cell)[@col=6][1]','VARCHAR(100)') AS C6,
       p.value('(cell)[@col=7][1]','VARCHAR(100)') AS C7
FROM @xml.nodes('/letter/mainTerm') PropertyFeed(p)


SELECT *
FROM dbo.TestXML

SQLFiddle の例を参照してください

于 2013-06-23T08:19:35.107 に答える