Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Загрузка .csv файла сразу в несколько таблиц.  [new]
Learginy
Member

Откуда:
Сообщений: 4
Здравствуйте, уважаемые форумчане!

Я новичок в SQL.
У нас в базе существуют 3 таблицы, в которую загружаются данные.
Раньше данные загружались с помощью самописной проги, которая всех устаривала, пока не возросли объемы данных для загрузки.
Условно говоря, 30к строк загружались в течении нескольких часов и разносились по этим трем таблицам.
Сейчас стоит задача раз в месяц загружать порядка 0.5 - 1 миллиона строк.

Исходники приложения которым раньше пользовались давно утеряны, таким образом подходить к решению этого вопроса со стороны изменения приложения не представляется возможным.

Подскажите пожалуйста с какой стороны подойти к решению данной проблемы?
Скрипты таблиц и пример .csv файла под спойлером и во вложении соответственно.
Если нужно дополнительное описание, пожалуйста скажите.

Заранее спасибо!

+

Microsoft SQL Server 2008 R2 (SP3-GDR) (KB4057113) - 10.50.6560.0 (X64)
Dec 28 2017 15:03:48
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

CREATE TABLE [dbo].[Policy] (
    [IDPolicy]                 INT             IDENTITY (1, 1) NOT NULL,
    [Policy]                   NVARCHAR (2000) NULL,
    [PolicyNumber]             NVARCHAR (50)   NULL,
    [IDProduct]                NVARCHAR (50)   NULL,
    [StartDate]                DATETIME        NULL,
    [EndDate]                  DATETIME        NULL,
    CONSTRAINT [PK_Policy] PRIMARY KEY CLUSTERED ([IDPolicy] ASC)
);
CREATE TABLE [dbo].[Person] (
    [IDPerson]            INT             IDENTITY (1, 1) NOT NULL,
    [IDPolicy]            INT             NULL,
    [EndCustomerName]     NVARCHAR (50)   NULL,
    [EndCustomerSurname]  NVARCHAR (50)   NULL,
    [Birthdate]           DATETIME        NULL,
    CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([IDPerson] ASC),
    CONSTRAINT [FK_Person_Policy] FOREIGN KEY ([IDPolicy]) REFERENCES [dbo].[Policy] ([IDPolicy])
);
CREATE TABLE [dbo].[Vehicle] (
    [IDVehicle]                    INT            IDENTITY (1, 1) NOT NULL,
    [Vehicle]                      NVARCHAR (50)  NULL,
    [IDPolicy]                     INT            NULL,
    [LicencePlate]                 NVARCHAR (50)  NULL,
    [FirstDate]                    DATETIME       NULL,
    [ModelType]                    NVARCHAR (50)  NULL,
    [VIN]                          NVARCHAR (20)  NULL,
    [Brand]                        NVARCHAR (50)  NULL,
    CONSTRAINT [PK_Vehicle] PRIMARY KEY CLUSTERED ([IDVehicle] ASC),
    CONSTRAINT [FK_Vehicle_Policy] FOREIGN KEY ([IDPolicy]) REFERENCES [dbo].[Policy] ([IDPolicy])
);


К сообщению приложен файл (Test.csv - 259bytes) cкачать
12 дек 18, 11:54    [21761249]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка .csv файла сразу в несколько таблиц.  [new]
ЛиП
Member

Откуда:
Сообщений: 348
SSIS
12 дек 18, 12:08    [21761285]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка .csv файла сразу в несколько таблиц.  [new]
aleks222
Member

Откуда:
Сообщений: 850
ЛиП
SSIS

Зачем этот тупой монстр?

BULK INSERT + процедура из трех запросов
12 дек 18, 13:23    [21761449]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка .csv файла сразу в несколько таблиц.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
BULK хорошо работает для SOHO, но в промышленных системах его сложно сопровождать.
12 дек 18, 13:41    [21761494]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка .csv файла сразу в несколько таблиц.  [new]
aleks222
Member

Откуда:
Сообщений: 850
Владислав Колосов
BULK хорошо работает для SOHO, но в промышленных системах его сложно сопровождать.


1. Вы не умеете его готовить.
2. Не может быть более сложная система более надежной.
3. Для имитации бурной деятельности, да, незаменимая вещь.
12 дек 18, 13:51    [21761513]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка .csv файла сразу в несколько таблиц.  [new]
Learginy
Member

Откуда:
Сообщений: 4
aleks222
Владислав Колосов
BULK хорошо работает для SOHO, но в промышленных системах его сложно сопровождать.


1. Вы не умеете его готовить.
2. Не может быть более сложная система более надежной.
3. Для имитации бурной деятельности, да, незаменимая вещь.


Не могли бы Вы подсказать, как его правильно готовить?)
aleks222
...
BULK INSERT + процедура из трех запросов

Можете описать немного подробнее?
К сожалению я все еще не очень понимаю что мне нужно сделать

Спасибо за ответы!
12 дек 18, 14:04    [21761537]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка .csv файла сразу в несколько таблиц.  [new]
uaggster
Member

Откуда:
Сообщений: 765
Learginy,

:-)
12 дек 18, 14:16    [21761552]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка .csv файла сразу в несколько таблиц.  [new]
aleks222
Member

Откуда:
Сообщений: 850
Learginy
Не могли бы Вы подсказать, как его правильно готовить?)
aleks222
...
BULK INSERT + процедура из трех запросов



Все великое - просто

   create table #TB_SUB_REGION ( 	dummy varchar(1) NULL,
                                    SUB_REGION_ID int primary key,
	                                SUB_REGION_CODE varchar(4) NOT NULL,
	                                SUB_REGION_NAME varchar(128) NOT NULL,
	                                REGION_ID int NULL,
	                                [STATUS] varchar(32) NOT NULL,
	                                STATUS_DATE varchar(128) NOT NULL,
	                                LAST_ACTIVITY_TYPE char(4) NOT NULL
                                 );

    bulk insert #TB_SUB_REGION
      from 'C:\Gate\In\Atlantis\Carnival\TB_SUB_REGION.csv' 
      with ( FORMATFILE = 'C:\Gate\In\Atlantis\Carnival\TB_SUB_REGION.fmt'
           , DATAFILETYPE = 'char', CODEPAGE = 'RAW', FIRSTROW = 2 
           , ORDER( SUB_REGION_ID )     
           --, ERRORFILE = 'C:\Gate\In\Atlantis\Carnival\TB_SUB_REGION.err'
           );

--опосля чего можно распихать содержимое хоть в десять таблиц
12 дек 18, 16:49    [21761833]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка .csv файла сразу в несколько таблиц.  [new]
uaggster
Member

Откуда:
Сообщений: 765
Learginy, имейте ввиду, что это:
aleks222
from 'C:\Gate\In\Atlantis\Carnival\TB_SUB_REGION.csv'

- путь на сервере.
Но он вполне проглатывает и UNC пути \\сервер\шара.
Доступ к шаре должен иметь компьютер$, если сам MSSQLSERVER на этом компьютер запущен от имени nt service\mssqlserver или network service.
12 дек 18, 17:01    [21761848]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка .csv файла сразу в несколько таблиц.  [new]
Learginy
Member

Откуда:
Сообщений: 4
aleks222
Learginy
Не могли бы Вы подсказать, как его правильно готовить?)
пропущено...



Все великое - просто

...
      with ( FORMATFILE = 'C:\Gate\In\Atlantis\Carnival\TB_SUB_REGION.fmt'
...


Это файл форматирования, верно? Его нужно сделать на основе #таблицы с помощью bcp? Как не подскажете?
13 дек 18, 11:21    [21762628]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка .csv файла сразу в несколько таблиц.  [new]
Learginy
Member

Откуда:
Сообщений: 4
Learginy
aleks222
пропущено...


Все великое - просто

...
      with ( FORMATFILE = 'C:\Gate\In\Atlantis\Carnival\TB_SUB_REGION.fmt'
...


Это файл форматирования, верно? Его нужно сделать на основе #таблицы с помощью bcp? Как не подскажете?


Извините, в гугле разбанили.
13 дек 18, 11:28    [21762646]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить