Каталог решений - ADODB: Прямая запись и другие операции с SQL — таблицами (MS SQL server 2000)

ADODB: Прямая запись и другие операции с SQL — таблицами (MS SQL server 2000)

ADODB: Прямая запись и другие операции с SQL — таблицами (MS SQL server 2000)

В наличии

В каком случае имеет смысл прямая запись в SQL – таблицу?
Как ускорить процесс записи в SQL — таблицу?
Запись данных
Архивирование
Статья для новичков (обновленная версия от 23.03.2011)

Категория:

Описание

В каком случае имеет смысл прямая запись в SQL-таблицу?

Когда может понадобиться прямая запись в SQL-таблицу на платформе 1С 8.1?

В нашем случае таблица регистра 1С8.1 использовалась как источник для перекачки данных в другую учетную базу. Некоторое время все работало средствами 1С. Но настал момент, когда процесс записи регистра стал занимать неприлично много времени. При этом все данные в регистре «остро необходимы».

Как ускорить процесс записи в SQL-таблицу

После некоторых мытарств (превзойти 1С в плане оптимизации работы с SQL мне не удалось), встал вопрос об индексации таблицы. В итоге было решено скопировать таблицу регистра в отдельную таблицу и убить все индексы, что в разы ускорило процесс прямой записи.

Далее описана реализация процесса записи в SQL-таблицу без индексов.

Пример ТЗ

Разберем на конкретном примере.

Допустим, что перед нами стоят задачи:

  • Собирать по определенным счетам проводки за период в разрезе организаций (Орг) и сценариев (Сцен), обрабатывать эти данные по известным правилам и записывать данные в таблицу отдельной базы
  • Записи за период по организациям и сценариям должны перезаписываться
  • Необходимо архивировать таблицу в виде копий на дату

 

Полезная литература:

  1. Using Connection Pooling with SQL server
  2. Understanding ADO Transactions with MS SQL Server
  3. Использование библиотеки ADO
  4. Руководство по производительности загрузки данных (SQL server 2005 и SQL server 2008)
  5. Справочник по Transact-SQL (компонент Database Engine)
  6. ADO CreateParameter Metod

 

Реализация

Создание базы

Для создания базы нам потребуется «Enterprise Manager» (рис.1)

Рис 1.

Открыв «Enterprise Manager». позиционируемся на папке «Databases» и щелчком правой кнопки мыши создаем новую базу (рис.2).

Рис 2.

Создаем базу (рис.3).

Рис 3.

Настройка базы изображена на рис.4 и 5

Рис 4.

Рис 5.

(T-SQL:
Create DataBase MyBase
Alter DataBase MyBase SET Recovery Simple
Alter DataBase MyBase SET Auto_Shrink ON)

 

Создание таблицы

Откроем нашу базу, спозициониремся на «Tables» и правой кнопкой мыши — создать новую таблицу (рис. 6)

Рис 6.

Следуя ТЗ, мы имеем «ключевые» поля:

 

  • Период
  • Организация (Орг)
  • Сценарий (Сцен)

 

Остальные поля представим в виде основных типов данных (рис. 7). Типы значений и их длина взяты на примере регистра 1С.

Рис 7.

Таким образом, мы имеем таблицу «MyTable» (рис. 8):

Рис 8.

Для корректной работы пишем Организацию и Сценарий в виде ссылок (рис. 8). Это нам понадобиться в дальнейшем.

(T-SQL:
Create Table MyBase.dbo.MyTable (ПолеПериод DateTime, ПолеОргСсылка binary(16), ПолеСценСсылка binary(16), ПолеСтрока nvarchar(100), ПолеБулево binary(1), ПолеСумма decimal(15,2))

)

 

Форма обработки

Рис 9.

Не претендую на то, что обработка должна выглядеть именно так. Хотелось бы отметить, что процессы обработки данных и их запись в регистр разделены.

 

Сбор и обработка данных

В данном случае этот процесс не представляет интереса. В конечном итоге имеем таблицу значений «таблицаДанных»

 

Очистка таблицы, запись в регистр

Будем использовать следующую схему:

—> НачатьТранзакцию

—-> ОчиститьРегистр

—-> ЗаписатьРегистр

—> ЗафиксироватьТранзакцию

 

Не буду приводить весь код обработки, остановлюсь лишь на основных моментах.

 

СтрокаКоннекта = «Provider=SQLOLEDB;Password=sdR$543Qr;Persist Security Info=True;User ID= userSQL;Initial Catalog=MyBase;Data Source=serverSQL»;

 

 

//Источник получения GUID: Mista.ru

// конец источника

Далее собственные изыскания:


 

Фрагмент кода очистки и записи в регистр:

Необходимо отметить, что в приведенном выше фрагменте кода «FIRM» — Организация, «BASE» — Сценарий, «Entity_Name» — пример строкового значения, «InRep» — булево и «SUMM» — сумма.

 

Архивирование таблиц

Сразу хочу оговориться, что архивирование происходит путем копирования таблицы на определенную дату.

 

 

has been added to your cart:
Оформление заказа