您好,我正在尝试使用 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)
关于c# - 使用 OpenXml 插入 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19217690/