【问题标题】:XML Bulk Load issue into SQL ServerSQL Server 中的 XML 批量加载问题
【发布时间】:2012-05-29 16:04:46
【问题描述】:

我正在尝试使用 XML 批量加载 (sql server 2008)。我快到了,但我认为我的架构文件是错误的。我得到的错误是:

这是我所拥有的:

SQL 表结构:

架构文件:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data" 
    xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"  
    xmlns:sql="urn:schemas-microsoft-com:xml-sql" > 

    <ElementType name="weight" dt:type="string" />
    <ElementType name="fwd" dt:type="float" />
    <ElementType name="aft" dt:type="float" />

    <ElementType name="CGs" sql:is-constant="1">
        <element type="gross" />
    </ElementType>

    <ElementType name="gross"  sql:relation="tblCGLimits">
      <element type="weight"  sql:field="weight" />
      <element type="fwd" sql:field="fwd" />
      <element type="aft"        sql:field="aft" />
   </ElementType>
</Schema>

XML 文件:

<?xml version="1.0" encoding="utf-8" ?>
<CGs>
    <gross weight="8000">
        <fwd>196.5</fwd>
        <aft>208.88162</aft>
    </gross>
    <gross weight="8001">
        <fwd>196.495</fwd>
        <aft>208.8825148</aft>
    </gross>
    <gross weight="8002">
        <fwd>196.49</fwd>
        <aft>208.8834096</aft>
    </gross>
</CGs>

还有我正在使用的 VBScript:

Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")
objBL.ConnectionString = "provider=SQLOLEDB.1;data source=MyServer;database=MyDB;uid=MyUser;pwd=MyPW"
objBL.ErrorLogFile = "c:\XMLError.log"
objBL.Execute "c:\Schema.xml", "c:\CGLimits.xml"
Set objBL = Nothing

【问题讨论】:

    标签: sql-server vbscript sqlxml


    【解决方案1】:

    您的 XSD 文件指定权重值是元素,而不是属性,如下所示:

    <?xml version="1.0" encoding="utf-8" ?>
    <CGs>
        <gross>
            <weight>8000</weight>
            <fwd>196.5</fwd>
            <aft>208.88162</aft>
        </gross>
        <gross>
            <weight>8001</weight>
            <fwd>196.495</fwd>
            <aft>208.8825148</aft>
        </gross>
        <gross>
            <weight>8002</weight>
            <fwd>196.49</fwd>
            <aft>208.8834096</aft>
        </gross>
    </CGs>
    

    要更正此问题,请更改

    <element type="weight" sql:field="weight"/>
    

    <attribute type="weight" sql:field="weight"/>
    

    在 XSD 文件中。

    【讨论】:

    • 我想在标签名称“gross”之后使用该值。我认为您发布的 XML 会导致重量标签重复问题。
    • @ElJay - 啊,我明白了。请用谷歌搜索 XML 元素和 XML 属性之间的区别。答案现已修复。
    • 问题是我无法更改 XML 文件。我必须使用我所拥有的(那里也有大约 5000 个条目)。如何更改我的架构文件以使用此 XML 文件?
    • @ElJay - 这正是我在更新的答案中建议你的。不要更改 XML 文件。按照建议更改架构文件。
    • 啊。我没有充分阅读您的答案:)。知道了。谢谢大佬!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多