Процедура предназначена для выгрузки данных из таблицы значений в таблицу на 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_Соединение = Неопределено;
Сообщить("Всего:" + КолВсего + "; Загружено:" + КолТекущая);
КонецЕсли;
Конец процедуры