gpt4 book ai didi

sql-server - 将 XML 文件读入 SQL Server 数据库

转载 作者:行者123 更新时间:2023-12-01 23:30:57 25 4
gpt4 key购买 nike

我正在尝试将 XML 文件读入已存在的数据库表中。

问题在于 XML 标记和数据库列的名称不同,尽管它们具有相同的数据类型。因此,我想将 XML 标记“翻译”到数据库列中,以便可以输入到数据库中。

不过我不确定该怎么做。

这是我到目前为止所做的。

static void writeToDatabase()
{
XmlDocument doc= new XmlDocument();

try {
// Reading the xml
doc.Load("C:\\Temp\navetout.xml");

DataTable dt = new DataTable();

// Code here to read the xml into an already existing database table?
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}

数据库位于另一台服务器上,我已将其包含在 app.config

<connectionStrings>
<add name="CS"
connectionString="Data Source=tsrv2062;Initial Catalog=BUMS;Integrated Security=True"/>
</connectionStrings>

举个例子,XML 文件有标签“姓名”,而数据库表列有“名字”列。

XML 示例:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfFolkbokforingspostTYPE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FolkbokforingspostTYPE>
<Sekretessmarkering xsi:nil="true" />
<Personpost>
<PersonId>
<PersonNr>7527245452542</PersonNr>
</PersonId>
<HanvisningsPersonNr xsi:nil="true" />
<Namn>
<Tilltalsnamnsmarkering>20</Tilltalsnamnsmarkering>
<Fornamn>skjdgnsdng</Fornamn>
<Mellannamn xsi:nil="true" />
<Efternamn>sdsdgsdgs</Efternamn>
<Aviseringsnamn xsi:nil="true" />
</Namn>
<Folkbokforing>
<Folkbokforingsdatum>20060512</Folkbokforingsdatum>
<LanKod>56</LanKod>
<KommunKod>77</KommunKod>
<ForsamlingKod xsi:nil="true" />
<Fastighetsbeteckning>PÅLNGE 6:38</Fastighetsbeteckning>
<FiktivtNr>0</FiktivtNr>
</Folkbokforing>
<Adresser>
<Folkbokforingsadress>
<CareOf xsi:nil="true" />
<Utdelningsadress1 xsi:nil="true" />
<Utdelningsadress2>sgdsdgsdgs</Utdelningsadress2>
<PostNr>78965</PostNr>
<Postort>PÅLÄNG</Postort>
</Folkbokforingsadress>
<Riksnycklar>
<FastighetsId>46464545</FastighetsId>
<AdressplatsId>764846846</AdressplatsId>
<LagenhetsId>45465654645</LagenhetsId>
</Riksnycklar>
</Adresser>
<Fodelse>
<HemortSverige>
<FodelselanKod>00</FodelselanKod>
<Fodelseforsamling>NEDERKALIX</Fodelseforsamling>
</HemortSverige>
</Fodelse>
<Medborgarskap>
<MedborgarskapslandKod>SE</MedborgarskapslandKod>
<Medborgarskapsdatum>0</Medborgarskapsdatum>
</Medborgarskap>
</Personpost>
</FolkbokforingspostTYPE>
</ArrayOfFolkbokforingspostTYPE>

这些是数据库表的列:

PersonalIdentityNumber
ProtectedIdentity
ReferedCivicRegistrationNumber
UnregistrationReason
UnregistrationDate
MessageComputerComputer
GivenNameNumber
FirstName
MiddleName
LastName
NotifyName
NationalRegistrationDate
NationalRegistrationCountyCode
NationalRegistrationMunicipalityCode
NationalRegistrationCoAddress
NationalRegistrationDistributionAddress1
NationalRegistrationDistributionAddress2
NationalRegistrationPostCode
NationalRegistrationCity
NationalRegistrationNotifyDistributionAddress
NationalRegistrationNotifyPostCode
NationalRegistrationNotifyCity
ForeignDistrubtionAddress1
ForeignDistrubtionAddress2
ForeignDistrubtionAddress3
ForeignDistrubtionCountry
ForeignDate
BirthCountyCode
BirthParish
ForeignBirthCity
CitizenshipCode
CitizenshipDate
Email
Telephone
Mobiletelephone
Gender
NotNewsPaper
Note
StatusCode
NationalRegistrationCode
RegistrationDate
LastUpdatedFromNavet
TemporaryDistrubtionAddress1
TemporaryDistrubtionAddress2
TemporaryDistrubtionAddress3
TemporaryDistrubtionCountry
Password
VisibilityLevel
LastChangedBy
LastChangedDate
SeamanIdentity
Category

这里举个例子,<PersonNr> tagg 和数据库列 PersonalIdentityNumber是相同的。与 XML 标签不匹配的列应该返回 null .

在将 XML 数据读入数据库表之前,我想必须将 XML 标签转换为数据库表列。在本例中为“名字”。

任何人都可以帮我解决这个“翻译”和读取数据库表的问题。

最佳答案

DECLARE @xml XML
SELECT @xml = BulkColumn
FROM OPENROWSET(BULK 'D:\sample.xml', SINGLE_BLOB) x

SELECT
t.c.value('(PersonId/PersonNr/text())[1]', 'VARCHAR(100)'),
t.c.value('(Namn/Tilltalsnamnsmarkering/text())[1]', 'INT')
FROM @xml.nodes('*:ArrayOfFolkbokforingspostTYPE/*:FolkbokforingspostTYPE/*:Personpost') t(c)

关于sql-server - 将 XML 文件读入 SQL Server 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36061723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com