将多个XML文件导入远程SQL Server表

将多个XML文件导入远程SQL Server表,sql,xml,sql-server-2008,import,Sql,Xml,Sql Server 2008,Import,这是我的客户机提供的XML文件的要点。文件名为Rep[yr][mo]。我尝试使用VisualStudio生成的模式将一个模式上传到我的DB中,但它始终告诉我,无论我做什么,某些节点都缺少引用。有什么建议吗 <xml> <reports> <report name="Report 1"> <client id="Client 1"> <stat stat_id="client_stats">

这是我的客户机提供的XML文件的要点。文件名为Rep[yr][mo]。我尝试使用VisualStudio生成的模式将一个模式上传到我的DB中,但它始终告诉我,无论我做什么,某些节点都缺少引用。有什么建议吗

<xml>
<reports>
    <report name="Report 1">
        <client id="Client 1">
            <stat stat_id="client_stats">
                <monthStats>0</monthStats> 
                <yearStats>0</yearStats> 
            </stat >
        </client>
        <client id="Client 2">
            <stat stat_id="client_stats">
                <monthStats>0</monthStats> 
                <yearStats>0</yearStats> 
             </stat >
        </client>
    </report>
    <report name="Report 2">
        <client id="Client 1">
            <stat stat_id="client_stats">
                <monthStats>0</monthStats> 
                <yearStats>0</yearStats> 
            </stat >
        </client>
        <client id="Client 2">
            <stat stat_id="client_stats">
                <monthStats>0</monthStats> 
                <yearStats>0</yearStats> 
             </stat >
        </client>
    </report>
</reports>
</xml>
但我得到了一个错误:“报告”上预期的模式:关系


客户最初的目标是将所有内容都放在一个巨大的表中,但如果您对更好的结构有任何想法,我们将不胜感激

我建议您使用SSI将XML文档导入SQL Server数据库。最初将其导入单独的表中,然后使用导入的表数据将数据插入/删除/更新到其他表中。此外,您可以使用sql查询和join和insert into语句将所有内容组合到一个巨大的表中

以下是有关如何

希望这能有所帮助

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"     attributeFormDefault="unqualified" xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
<xs:element name="xml">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="reports" sql:is-constant="true">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="report" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="client" minOccurs="0" maxOccurs="unbounded">
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:element name="stat" minOccurs="0">
                                                    <xs:complexType>
                                                        <xs:sequence>
                                                            <xs:element name="monthStats" type="xs:decimal" minOccurs="0" sql:field="monthStats"/>
                                                            <xs:element name="yearStats" type="xs:decimal" minOccurs="0" sql:field="yearStats"/>
                                                        </xs:sequence>
                                                        <xs:attribute name="stat_id" type="xs:string" use="optional" sql:field="stat_id"/>
                                                    </xs:complexType>
                                                </xs:element>
                                            </xs:sequence>
                                            <xs:attribute name="id" type="xs:unsignedShort" use="optional" sql:field="clientID"/>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                                <xs:attribute name="name" type="xs:string" use="optional" sql:field="reportName"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad.4.0")
objBL.ConnectionString = "Provider=SQLOLEDB; Data Source=[source];Initial Catalog=[database];User ID='[id]';Password='[pw]'"
objBL.ErrorLogFile = "[path]"
objBL.Execute "[the xsd]", "[xml file]"
Set objBL = Nothing

Dim strPathToSchema As String = "c:\path\FileName.xsd"
Dim strPathToData As String = "c:\path\FileName.xml"
Dim dtXMLData As New DataTable()

dtXMLData.ReadXMLSchema(strPathToSchema)
dtXMLData.ReadXML(strPathToData)