【问题标题】:How to Insert xml data into SQL Server table?如何将 xml 数据插入 SQL Server 表?
【发布时间】:2020-12-02 22:18:36
【问题描述】:

如何将以下 XML 数据导入 SQL Server 三列表?

<dataset> 
 <metadata>
  <item name="NAME_LAST" type="xs:string" length="62" /> 
  <item name="NAME_FIRST" type="xs:string" length="62" /> 
  <item name="NAME_MIDDLE" type="xs:string" length="32" />
 </metadata>
<data>
<row>
 <value>SMITH</value> 
 <value>MARY</value> 
 <value>N</value> 
</row>
<row>
 <value>SMITH2</value> 
 <value>MARY2</value> 
 <value>N2</value> 
</row>
</data>
</dataset>

【问题讨论】:

标签: sql-server


【解决方案1】:

试试这个:

DECLARE @input XML = '<dataset> 
 <metadata>
  <item name="NAME_LAST" type="xs:string" length="62" /> 
  <item name="NAME_FIRST" type="xs:string" length="62" /> 
  <item name="NAME_MIDDLE" type="xs:string" length="32" />
 </metadata>
<data>
<row>
 <value>SMITH</value> 
 <value>MARY</value> 
 <value>N</value> 
</row>
<row>
 <value>SMITH2</value> 
 <value>MARY2</value> 
 <value>N2</value> 
</row>
</data>
</dataset>'

INSERT INTO dbo.YourTable(ColName, ColFirstName, ColOther)
   SELECT
      Name = XCol.value('(value)[1]','varchar(25)'),
      FirstName = XCol.value('(value)[2]','varchar(25)'),
      OtherValue = XCol.value('(value)[3]','varchar(25)')
   FROM 
      @input.nodes('/dataset/data/row') AS XTbl(XCol)

【讨论】:

    【解决方案2】:
    Insert XML Data into sql Server table
    
    Declare @retValue1 varchar(50);
    Declare @XmlStr XML;
    SET @XmlStr='<Customers>
     <customer>
        <ID>111589</ID>
        <FirstName>name1</FirstName>
        <LastName>Lname1</LastName>
        <Company>ABC</Company>
      </customer>
      <customer>
        <ID>12345</ID>
        <FirstName>name2</FirstName>
        <LastName>Lname2</LastName>
        <Company>ABC</Company>
      </customer>
      <customer>
        <ID>14567</ID>
        <FirstName>name3</FirstName>
        <LastName>Lname3</LastName>
        <Company>DEF</Company>
      </customer>
    </Customers>';
    
    @retValue='Failed';
     
    INSERT INTO  [test_xmlinsert](
    [id],
    [firstName],
    [lastName],
    [company]
    )
    SELECT
    COALESCE([Table].[Column].value('ID[1]', 'int'),0) as 'ID',
    [Table].[Column].value('FirstName [1]', 'varchar(50)') as ' FirstName ',
    [Table].[Column].value(' LastName[1]', 'varchar(50)') as ' LastName',
    [Table].[Column].value(' Company [1]', 'varchar(50)') as ' Company'
     FROM @XmlStr.nodes('/ Customers / customer') as [Table]([Column])
    IF(@@ROWCOUNT > 0 )
      SET @retValue='SUCCESS';
    

    【讨论】:

    • 我可能看起来很傻,但先声明变量然后设置值对我有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多