c# - 使用 OpenXml 插入 SQL

标签 c# sql sql-server xml sqlxml

您好,我正在尝试使用 XML 文件将数据插入到 SQL Server 数据库中,该文件具有如下一些数据。我能够在 OPENXML 中进行属性映射。如果我尝试将 XML 作为元素而不是属性传递,我收到有关空插入的错误。

以下是我的 XML 文件(包含属性)

<NewDataSet>
  <SampleDataTable id="20" Name="as" Address="aaa" Email="aa" Mobile="123" />
</NewDataSet>

我使用上面的格式成功了。如果我使用下面的格式,我会遇到错误

<Customer>
  <Id>20</Id>
  <Name>Cn</Name>
  <Address>Pa</Address>
  <Email>bnso@gmail.com</Email>
  <Mobile>12345513213</Mobile>
</Customer>

这是我在 SQL 中的 openXML

 insert into @tempTable
    select * from openxml (@xmlHandle,'ROOT/Customer/',1)
    with (Cust_id int '@id',
          Customer_Name varchar(30) '@Name',
          Address varchar(30) '@Address',
          Email_id varchar(30) '@Email',
          Mobile_no bigint '@Mobile'
          )

    Insert into Test.dbo.tblCustomers (Cust_id,Customer_Name,Address,Email,Mobile_No) (select * from @tempTable)

请帮忙

最佳答案

这是因为您试图将数据作为属性获取,但 int 您的 xml 数据位于元素内部。试试这个:

insert into @tempTable
select *
from openxml (@xmlHandle,'ROOT/Customer/',1)
with (Cust_id int '@id',
      Customer_Name varchar(30) 'Name[1]',
      Address varchar(30) 'Address[1]',
      Email_id varchar(30) 'Email[1]',
      Mobile_no bigint 'Mobile[1]'
      )

或者你可以在没有 openxml 的情况下这样做:

select
    t.c.value('Name[1]', 'varchar(30)') as Name,
    t.c.value('Address[1]', 'varchar(30)') as Address,
    t.c.value('Email[1]', 'varchar(30)') as Email,
    t.c.value('Mobile[1]', 'bigint') as Mobile
from @Data.nodes('Customer') as t(c)

sql fiddle demo

关于c# - 使用 OpenXml 插入 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19217690/

相关文章:

c# - 如何以可读格式从 MySQL 获取数据 C#

php - 使用 jquery + php 的动态 sql 查询

sql-server - sql Management Studio 超过 7 列的 t-sql 唯一约束

mysql - 处理 SQL 保留表名和列名

sql - 如何编写更新查询以使用 SQL 数据源更新两个表?

c# - 在datagridview中垂直显示所有单元格文本

c# - 如何在组合框中放置换行符/制表符

c# - 如何获取中继器内复选框的 ID

java - 数据未在组合框中显示 - 使用 Netbeans 的 Sql 和 Java

sql - 需要查询 SSRS 数据库以获取报告访问权限