.net 在SQL Server中从XML大容量插入
我正在尝试在SQLServer中使用XML插入数据。我使用的XML是.net 在SQL Server中从XML大容量插入,.net,sql-server,xml,sql-server-2005,bulkinsert,.net,Sql Server,Xml,Sql Server 2005,Bulkinsert,我正在尝试在SQLServer中使用XML插入数据。我使用的XML是 <ArrayOfInfringementEntity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <InfringementEntity> <infringementNumber>12345678911</i
<ArrayOfInfringementEntity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<InfringementEntity>
<infringementNumber>12345678911</infringementNumber>
<issueAgency>017</issueAgency>
<infringementType>1A</infringementType>
<infringementStatus>0</infringementStatus>
<batchRecordId>0</batchRecordId>
<incidentDate xsi:nil="true" />
<infringementSource>OTS</infringementSource>
<TypeOfNotice>0</TypeOfNotice>
<offenceEntity>
<offenceCode>7777</offenceCode>
<offenceDate>1999-05-31T00:00:00</offenceDate>
<offenceTime>121212</offenceTime>
<offenceLocation>ST56789</offenceLocation>
<offenceOwnerType>0</offenceOwnerType>
<offenceSuburb>SOUTH YARRA</offenceSuburb>
<site>ST56789</site>
<detectedSpeed>70</detectedSpeed>
<allegedSpeed>60</allegedSpeed>
<permittedSpeed>50</permittedSpeed>
<timeInRedLight>40</timeInRedLight>
<tollAmount>140</tollAmount>
<enforcementAllowance>310</enforcementAllowance>
<lookUpFee>510</lookUpFee>
<invoiceFee>130</invoiceFee>
</offenceEntity>
<vehicleEntity>
<vehicleClass>2</vehicleClass>
<vehicleMake>BMW</vehicleMake>
<vehicleModel>FOUR WHEELER</vehicleModel>
<bodyType>HEAVY</bodyType>
<primaryColour>GRN</primaryColour>
<manufactureYear>2010</manufactureYear>
<gvm>111</gvm>
<gcm>210</gcm>
<registrationNumber>CBD-1111</registrationNumber>
<registrationState>VIC</registrationState>
</vehicleEntity>
<obligationNumber>obligation1</obligationNumber>
<isDebtorDeceased>false</isDebtorDeceased>
</InfringementEntity>
</ArrayOfInfringementEntity>
但我在Offencecode和vehicle类中得到空值。据我所知,这是合理的,因为
是
的子节点。我并不是专门阅读node。请提供帮助。基于您的XML,您可以使用此XQuerySELECT
从XML中提取您的项目:
select
@input.value('(/ArrayOfInfringementEntity/InfringementEntity/infringementNumber)[1]', 'VARCHAR(10)') 'InfringementNumber',
@input.value('(/ArrayOfInfringementEntity/InfringementEntity/issueAgency)[1]', 'VARCHAR(5)') 'Issue Agency',
@input.value('(/ArrayOfInfringementEntity/InfringementEntity/infringementType)[1]', 'VARCHAR(5)') 'Infringement Type',
@input.value('(/ArrayOfInfringementEntity/InfringementEntity/offenceEntity/offenceCode)[1]', 'INT') 'Offence Code',
@input.value('(/ArrayOfInfringementEntity/InfringementEntity/vehicleEntity/vehicleClass)[1]', 'INT') 'Vehicle Class',
@input.value('(/ArrayOfInfringementEntity/InfringementEntity/obligationNumber)[1]', 'VARCHAR(11)') 'Obligation Number'
将@input
替换为保存XML的变量或列(我在测试中将@input用作测试平台)
输出如下所示:
InfringementNumber Issue Agency Infringement Type Offence Code Vehicle Class Obligation Number
1234567891 017 1A 7777 2 obligation1
SELECT
InfrEntity.value('(infringementNumber)[1]', 'VARCHAR(10)') 'InfringementNumber',
InfrEntity.value('(issueAgency)[1]', 'VARCHAR(5)') 'Issue Agency',
InfrEntity.value('(infringementType)[1]', 'VARCHAR(5)') 'Infringement Type',
InfrEntity.value('(offenceEntity/offenceCode)[1]', 'INT') 'Offence Code',
InfrEntity.value('(vehicleEntity/vehicleClass)[1]', 'INT') 'Vehicle Class',
InfrEntity.value('(obligationNumber)[1]', 'VARCHAR(11)') 'Obligation Number'
from
(yourXMLcolumn).nodes('/ArrayOfInfringementEntity/InfringementEntity') as ArrInfr(InfrEntity)
当然,您也可以将插入到..
中,并使用此选择的输出作为要插入的值
更新:如果您的XML列包含多个条目(在/ArrayFinfRingementEntity
中的/injectmentEntity
),则需要使用选择,如下所示:
InfringementNumber Issue Agency Infringement Type Offence Code Vehicle Class Obligation Number
1234567891 017 1A 7777 2 obligation1
SELECT
InfrEntity.value('(infringementNumber)[1]', 'VARCHAR(10)') 'InfringementNumber',
InfrEntity.value('(issueAgency)[1]', 'VARCHAR(5)') 'Issue Agency',
InfrEntity.value('(infringementType)[1]', 'VARCHAR(5)') 'Infringement Type',
InfrEntity.value('(offenceEntity/offenceCode)[1]', 'INT') 'Offence Code',
InfrEntity.value('(vehicleEntity/vehicleClass)[1]', 'INT') 'Vehicle Class',
InfrEntity.value('(obligationNumber)[1]', 'VARCHAR(11)') 'Obligation Number'
from
(yourXMLcolumn).nodes('/ArrayOfInfringementEntity/InfringementEntity') as ArrInfr(InfrEntity)
我不知道在XML中可以得到多少行数据。据我所知,你们使用[1]符号来表示节点。如何引用所有行。+1 Sql Server 2005以后,使用原生xml功能比使用openxml
要好。