Проблема с массовой загрузкой XML в SQL Server

Я пытаюсь использовать массовую загрузку XML (sql server 2008). Я почти у цели, но мне кажется, что мой файл схемы неверен. Ошибка, которую я получаю, заключается в следующем:

Сообщение об ошибке VBS

Вот что у меня есть:

Структура таблицы SQL:

Структура таблицы 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

person LJ Wilson    schedule 29.05.2012    source источник


Ответы (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"/>

to

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

в XSD-файле.

person Jirka Hanika    schedule 29.05.2012
comment
Я хочу использовать значение сразу после брутто имени тега. Я думаю, что ваш опубликованный XML приведет к дублированию проблемы с тегом для веса. - person LJ Wilson; 29.05.2012
comment
@ElJay - А, понятно. Пожалуйста, поищите в Google разницу между XML-элементами и XML-атрибутами. Ответ исправлен сейчас. - person Jirka Hanika; 29.05.2012
comment
Проблема в том, что я не могу реально изменить файл XML. Приходится работать с тем, что есть (там тоже около 5000 записей). Что я могу сделать, чтобы изменить файл схемы для работы с этим файлом XML? - person LJ Wilson; 29.05.2012
comment
@ElJay - именно это я и советую вам в обновленном ответе. Не изменяйте файл XML. Измените файл схемы в соответствии с рекомендациями. - person Jirka Hanika; 29.05.2012
comment
Ах. Я недостаточно прочитал ваш ответ :). Понятно. Спасибо чувак! - person LJ Wilson; 30.05.2012