如何将xml文件中的行插入sql表

如何将xml文件中的行插入sql表,sql,xml,Sql,Xml,您好,我对使用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

您好,我对使用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>
但我在语法上有错误 你能帮我吗?如果有别的办法的话 thnx

添加结束元素字母 在INSERT语句中添加C2列 删除列列表中最后一列后的逗号 将方法中的XQuery修改为节点“/letter/mainTerm” 为.value方法中的每个值添加条件 -


请参见

中的示例,您使用的是哪个数据库?我使用的是sql数据库,它的名称MainDBsql database不是一个数据库。这是一个表达。您使用的是什么数据库引擎SQL Server、Oracle和MySQL?它们之间存在差异,试图回答您的问题意味着我们需要知道您使用的是哪一个。如果你发布一个问题,问我如何修理我的车?在汽车修理厂,法拉利的答案将不同于本田;这一点在这里也适用。请回答您的问题,并提供您正在使用的特定DBMS的标签。谢谢。语法错误是因为C7后面的逗号。列列表中的最后一列后面不应该有逗号。要获取所需的值,需要将nodes子句更改为/letter/mainTermthanx man it work for Me不客气,kiro;
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)
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