Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sqlXmlBulkLoad к новым вершинам мастерства  [new]
aleks2
Guest
Вот такой XML породило больное воображение неких программистов
<?xml version="1.0" encoding="utf-8" ?><ShipsDescription><![CDATA[тра-ля-ля]]></ShipsDescription>

надо загрузить sqlXmlBulkLoad.

Вот такую схему родил я.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ShipsDescription" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
>
  <xs:element name="ShipsDescription" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"
                   sql:relation="[infoflot_ShipsDescriptions]" 
                   sql:key-fields="ShipId"
                   sql:overflow-field="OverflowColumn"
  >
    <xs:complexType>
      <xs:attribute name="ShipId"   type="xs:int"    default="-1"/>
    </xs:complexType>
  </xs:element>
</xs:schema>


Но результаты не слишком хороши.
Все <![CDATA[тра-ля-ля]]> влетает в OverflowColumn.

OverflowColumn	                                                                        ShipId
<ShipsDescription><![CDATA[тра-ля-ля]]></ShipsDescription> -1

Конечно, это лучше, чем ничего.
Но хотелось бы совершенства. ПО сути - это фрагмент XML.

Кто умеет грузить фрагменты?
30 сен 16, 16:41    [19729814]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad к новым вершинам мастерства  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1837
aleks2,

если честно - не догнал.

У Вас описан только Overflow-Field и нет привязки к полям таблицы, он по сути все в overflow и воткнет.

В приведенном xml не увидел атрибута ShipId
попробовал на таком:
<?xml version="1.0" encoding="windows-1251"?>
<ShipsDescription ShipId="1"><![CDATA[тра-ля-ля]]></ShipsDescription>
<ShipsDescription ShipId="2"><![CDATA[тра-ля-ля]]></ShipsDescription>


Dim objBL, file

file = InputBox("file", "file", "C:\temp\msql.XML")

Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
objBL.ConnectionString = "provider=SQLOLEDB;data source=srv;database=test;integrated security=SSPI"
objBL.ErrorLogFile = "C:\temp\error.log" '_" & Now & ".log" 
objBL.CheckConstraints=True
'objBL.KeepIdentity=False
'objBL.KeepNulls=False 'True
objBl.XmlFragment = True
objBL.Execute "C:\temp\schema_msql.xsd", file

Set objBL=Nothing
полет нормальный

и структуры таблицы в какую грузите если можно?
30 сен 16, 18:24    [19730247]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad к новым вершинам мастерства  [new]
aleks2
Guest
1. Я гружу с генерацией схемы
Dim objBL 
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
objBL.ConnectionString = "provider=SQLOLEDB;data source=.\moretravel;database=tempdb;integrated security=SSPI"
objBL.ErrorLogFile = "error.log"

objBL.XMLFragment = True
objBL.SchemaGen = True
objBL.SGDropTables = True

objBL.Execute "ShipsDescription.xsd", "ShipsDescription.xml"


2. Атрибута ShipId там нету. Но мне надо создать поле в таблице. Можешь убрать, если это поможет.

3. Пробовать надо на таком
<?xml version="1.0" encoding="utf-8" ?><ShipsDescription><![CDATA[тра-ля-ля]]></ShipsDescription>

там именно ОДИН узел.

4. Привязка к таблице там есть. Или ты имеешь куда-то еще привязать?
sql:relation="[infoflot_ShipsDescriptions]"
30 сен 16, 20:19    [19730521]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad к новым вершинам мастерства  [new]
aleks2
Guest
Ну, если гора не идет к Магомету... приходится идти к горе.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ShipServices" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
>

  <xs:element name="ShipsDescription" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"
                   sql:relation="[infoflot_ShipsDescription]" 
                   sql:key-fields="ShipId"
                   sql:overflow-field="OverflowColumn"
  >
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="ShipId" type="xs:int" default="-1"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>
9 окт 16, 18:13    [19760871]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить