gifts2017

Связи между таблицами без конфигуратора (sql)

Опубликовал 1 1 (dglucas_) в раздел Администрирование - Сервисные утилиты

Sql-скрипт позволяет установить связи между таблицами базы 1Сv8.1 в клиент-серверном (MS SQL ) варианте без анализа конфигуратора. Удобно при интеграции 1С с другими программами.

Использует три SQL-базы - [Adv] - собственно, сама база 1С, [Tools] - база, где находится аггрегирующая функция Concatenate и база [AdvDW], куда помещается итоговая таблица связей Relations. Названия баз следует поменять на свои. Использовать три разных базы особой необходимости нет, просто мне так удобно.
Идея работы скрипта состоит в том, что 1С использует единый ключ типа binary(16) для всех таблиц. Поэтому, если связать (Select * from Ti inner join Tj on Ti.IDNi=Tj.IDNj) попарно все поля binary(16) всех таблиц и проверить, существует для каждого соединения хотя бы одна запись, то можно установить, существует ли связь между этими таблицами.
Аггрегирующая функция Concatenate служит для построения динамического sql. Это просто конкатенация строк заданной таблицы, описано подробно здесь http://msdn.microsoft.com/ru-ru/library/ms131056.aspx. Собственно, в сети можно найти аналоги без использования clr, но эта удобнее.
Чтобы проще понять, как все работает, можно раскомментировать Print.
Буду благодарен за любую конструктивную критику. Особо интересно оценить скорость работы на больших (минимум 10 млн. проводок ) живых базах.

Скачать файлы

Наименование Файл Версия Размер
Определение связей RC.rar 52
.rar 1,00Kb
21.09.10
52
.rar 1,00Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Герман (German) 21.09.10 22:52
вариант решения интересный, но он отвечает на вопрос какие связи существуют, а не какие могут существовать.

все таки лучше анализировать конфигуратор
http://infostart.ru/public/18979/ ;)
2. givi marych (Vin8787) 29.12.11 16:21
а есть ли способ получить всю информацию на уровне БД?
3. Дмитрий Геннадьевич (lucas_) 30.12.11 13:04
Какую именно? В принципе, из конфигурационных файлов можно вытянуть все.