Каталог решений - Выгрузка данных в таблицу MS SQL SERVER

Выгрузка данных в таблицу MS SQL SERVER

Выгрузка данных в таблицу MS SQL SERVER

В наличии

Процедура по выгрузке данных из 1C (таблица значений) в таблицу MS SQL SERVER через COM.

Категория:

Описание

Процедура предназначена для выгрузки данных из таблицы значений в таблицу на MS SQL SERVER. Имена колонок таблицы 1с и таблицы на SQL сервера должны совпадать.

Процедура НазваниеПроцедуры….(ТаблицаДанных)
    

Сервер =  ..... Наименование сервера ms sql;
НазваниеБазы = Имя базы данных;
НазваниеСхемы = ....
НазваниеТаблицы = ....
Пользователь = .....
Пароль = .....
 Попытка

Подключение к ms sql server

    SQL_Соединение = Новый COMОбъект("ADODB.Connection");
                    
    SQL_Соединение.Open("Provider=sqloledb; Server=" + Сервер + " ;Database=" + НазваниеБазы + "; User Id=" + Пользователь + ";Password=" + Пароль + ";");
    ПодключениеSQL = Истина;
        
 Исключение
        
    Сообщить("Соединение Не Установлено");
    ПодключениеSQL = Ложь;
    Возврат;
 КонецПопытки;
    
 Если ПодключениеSQL Тогда
        
    Command = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection = SQL_Соединение;

 

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

 

    Command.CommandText = "DELETE FROM [" + НазваниеБазы + "].[" + НазваниеСхемы + "].[" + НазваниеТаблицы + "]";
    Command.Execute();

Выборка данных о типах колонок в таблице на ms sql server
        

       Command.CommandText = "SELECT TABLE_CATALOG
                                |,TABLE_SCHEMA
                                |,TABLE_NAME
                                |,COLUMN_NAME
                                |,IS_NULLABLE
                                |,DATA_TYPE
                                |,CHARACTER_MAXIMUM_LENGTH
                                |,NUMERIC_PRECISION
                                |FROM INFORMATION_SCHEMA.COLUMNS
                                |Where INFORMATION_SCHEMA.COLUMNS.table_catalog = '" + НазваниеБазы + "'
                                |AND INFORMATION_SCHEMA.COLUMNS.table_schema = '" + НазваниеСхемы + "'
                                |AND INFORMATION_SCHEMA.COLUMNS.table_name = '" + НазваниеТаблицы + "'
                                |ORDER BY TABLE_SCHEMA, TABLE_NAME";
        
        
        Выборка=Неопределено;
        Попытка
            Выборка = Command.Execute();
        Исключение

            Сообщить("Не сделана выборка колонок из таблицы " + НазваниеТаблицы + " на MS SQL сервере");
            
            Если SQL_Соединение <> Неопределено Тогда
                SQL_Соединение.Close();
            КонецЕсли;

            Выборка                     = Неопределено;
            SQL_Соединение                 = Неопределено;
                        
            Возврат;
 
        КонецПопытки;
        
                
        ИменаКолонокМассив = Новый Массив;
        СтруктураИменКолонокИДлин = Новый Структура;
        
        
        ТекстЗапросаSQL= "INSERT INTO [" + НазваниеБазы + "].[" + НазваниеСхемы + "].[" + НазваниеТаблицы + "]
                    | (";
        
        ПерваяКолонка = Истина;
    
        Пока Выборка.EOF() = 0 Цикл
            
            //Добавляем
            ИмяКолонки      = Выборка.Fields("COLUMN_NAME").Value;
            
        
            ИменаКолонокМассив.Добавить(ИмяКолонки);
            
            Если ПерваяКолонка Тогда
                ТекстЗапросаSQL = ТекстЗапросаSQL + "[" + ИмяКолонки + "]";
            Иначе
                ТекстЗапросаSQL = ТекстЗапросаSQL + "," + "[" + ИмяКолонки + "]";
            КонецЕсли;
            ПерваяКолонка = Ложь;
            Выборка.MoveNext();
        КонецЦикла;
        
        ТекстЗапросаSQL = ТекстЗапросаSQL + ")
                    |  VALUES (";
        
        ТекстЗапросаДоVALUES = ТекстЗапросаSQL;
        
        КолВсего = ТаблицаДляЗагрузки.Количество();
        КолТекущая = 0;
        
        //Выгрузка данных из таблицы значений
        Для Каждого СтрТаб Из ТаблицаДанных Цикл
            ПерваяКолонка = Истина;
            ТекстЗапросаSQL = ТекстЗапросаДоVALUES;
            
            
            Для Каждого КолИмя Из  ИменаКолонокМассив Цикл
                
                Если ПерваяКолонка Тогда
 
                    ТекстЗапросаSQL = ТекстЗапросаSQL + СтрТаб[КолИмя];
                        
                Иначе
 
                    ТекстЗапросаSQL = ТекстЗапросаSQL + "," + СтрТаб[КолИмя];
                КонецЕсли;
                
                ПерваяКолонка = Ложь;
            КонецЦикла;
            
            ТекстЗапросаSQL = ТекстЗапросаSQL +")";
            Command.CommandText = ТекстЗапросаSQL;
            Command.Execute();            
            
            КолТекущая = КолТекущая + 1;
        КонецЦикла;
        
        
        
        Если SQL_Соединение <> Неопределено Тогда
            SQL_Соединение.Close();
        КонецЕсли;
        
        Выборка                     = Неопределено;
        SQL_Соединение                 = Неопределено;

    Сообщить("Всего:" + КолВсего + "; Загружено:" + КолТекущая);    
        
    КонецЕсли; 

Конец процедуры    

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