Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 заливка больших xml файлов  [new]
нуб987
Guest
файлы от EDI SLSRPT в xls-формате складываются в сетевую папку. Нужно их периодически читать и заливать в таблицу.
Поиск в яндексе говорит, что заливка xml в SQL сводится либо к чтению файла в переменную, а затем с помощью openxml в таблицу; либо с помощью VisualBasic.
Но хотелось бы автоматизма, чтобы СКЛ сам забирал эти файлы. Причем они могут быть большими (порядка 30-50Мб)

я чего-то не там ищу или на самом деле все так печально с заливкой xml?
ПС. основное хранилище данных находится на СКЛ2000. Но если с ним совсем все плохо в плане xml, то можно воспользоваться СКЛ2012.
22 июн 17, 03:29    [20582184]     Ответить | Цитировать Сообщить модератору
 Re: заливка больших xml файлов  [new]
aleks2
Guest
VBA не обязателен.
Годится и powershell или C#

Ключевое слово: SqlXmlBulkLoad

Важный лайфхак: xsd.exe (из утилит Visual Studio)
22 июн 17, 06:07    [20582212]     Ответить | Цитировать Сообщить модератору
 Re: заливка больших xml файлов  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Один из быстрых способов заливать XML - это юзать XmlBulkLoad либо делать что-то самописное на C#

SQL Server 2008+
SQLXML 4.0 x64: http://www.microsoft.com/en-gb/download/details.aspx?id=30403

И небольшой пример:

DROP TABLE IF EXISTS dbo.Products
GO

CREATE TABLE dbo.Products (
      ProductID INT
    , [Name] NVARCHAR(50)
    , ProductNumber NVARCHAR(25)
    , OrderQty SMALLINT
    , UnitPrice MONEY
    , ListPrice MONEY
    , Color NVARCHAR(15) DEFAULT 'Unknown' NOT NULL
    , MakeFlag BIT
    , FinishedGoods BIT
    , StandardCost MONEY
)
GO

EXEC sys.xp_cmdshell 'CScript "D:\PROJECT\XML\SQLXMLBulkLoad\sample1.vbs"'

sample1.vbs

Const CONNECT_STRING = "Provider=SQLOLEDB;Data Source=HOMEPC\SQL_2016;Database=tempdb;Integrated Security=SSPI"
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
objBL.ErrorLogFile = "X:\sample1.log"
objBL.CheckConstraints = True
objBL.KeepIdentity = False
objBL.ConnectionString = CONNECT_STRING
objBL.Execute "D:\PROJECT\XML\SQLXMLBulkLoad\sample1.xsd", "X:\sample1.xml"

sample1.xsd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
   <xsd:element name="Products" sql:is-constant="1" >
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element name="Product" sql:relation="Products" maxOccurs="unbounded">
           <xsd:complexType>
             <xsd:sequence>
               <xsd:element name="ProductID" type="xsd:integer" sql:key-fields="ProductID" />
               <xsd:element name="Name" type="xsd:string" />
               <xsd:element name="ProductNumber" type="xsd:integer" />
               <xsd:element name="OrderQty" type="xsd:string" />
               <xsd:element name="UnitPrice" type="xsd:decimal" />
               <xsd:element name="ListPrice" type="xsd:decimal" />
               <xsd:element name="Color" type="xsd:string" sql:is-constant="true" />
               <xsd:element name="MakeFlag" type="xsd:boolean" />
               <xsd:element name="FinishedGoodsFlag" type="xsd:boolean" sql:field="FinishedGoods" />
               <xsd:element name="StandardCost" type="xsd:decimal" />
               <xsd:element name="StartPrice" type="xsd:decimal" sql:mapped="false" />
             </xsd:sequence>
           </xsd:complexType>
         </xsd:element>
       </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

sample1.xml
    <Products>
      <Product>
        <ProductID>776</ProductID>
        <Name>Mountain-100 Black, 42</Name>
        <ProductNumber>BK-M82B-42</ProductNumber>
        <OrderQty>1</OrderQty>
        <UnitPrice>2024.9940</UnitPrice>
        <ListPrice>1054.9300</ListPrice>
        <Color>White</Color>
        <MakeFlag>1</MakeFlag>
        <FinishedGoodsFlag>0</FinishedGoodsFlag>
        <StandardCost>2754.9940</StandardCost>
      </Product>
    </Products>
22 июн 17, 09:42    [20582517]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить