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

Откуда:
Сообщений: 31
Добрый день.
Есть задача обновить n-е кол-во таблиц данными из dbf-файлов.
Операции одни и те же для всех таблиц - проверки и дальнейший update/insert записей.
Сейчас это реализовано IF-ами в одной хранимке для всех таблиц.
Вопрос в следующем - можно ли как-то реализовать, чтобы в хранимке было не n-e кол-во IF-ов на каждую таблицу, а как-то свернуть - чтобы для некоего набора таблиц выполнялся один и тот же набор операций? Если нет - то нет, если можно, то буду рад любому примеру в виде кода/ссылки=)
14 май 14, 14:19    [16015538]     Ответить | Цитировать Сообщить модератору
 Re: Обновление инфы в таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Sky1992
чтобы для некоего набора таблиц выполнялся один и тот же набор операций?

У вас что n-е кол-во таблиц, в которых все одинаково, кроме имени таблицы ?
14 май 14, 14:27    [16015579]     Ответить | Цитировать Сообщить модератору
 Re: Обновление инфы в таблицах  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
https://www.sql.ru/faq/faq_topic.aspx?fid=104
14 май 14, 14:27    [16015582]     Ответить | Цитировать Сообщить модератору
 Re: Обновление инфы в таблицах  [new]
Sky1992
Member

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

нет, n-е кол-во таблиц вообще. В каждой таблице все разное.
14 май 14, 14:30    [16015617]     Ответить | Цитировать Сообщить модератору
 Re: Обновление инфы в таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Sky1992
В каждой таблице все разное.

А как тогда можно для двух разных таблиц выполнить "одинаковый набор операций" ?
14 май 14, 14:31    [16015627]     Ответить | Цитировать Сообщить модератору
 Re: Обновление инфы в таблицах  [new]
Sky1992
Member

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

никак) на всякий случай спросил - вдруг как-то извратившись это возможно. Ну, на "нет" и суда нет.
14 май 14, 14:35    [16015665]     Ответить | Цитировать Сообщить модератору
 Re: Обновление инфы в таблицах  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9160
Для таблиц можно создать справочники мета-данных и по ним запускать робота, который обработает одними и теми же алгоритмами эти мета-данные.
14 май 14, 14:41    [16015715]     Ответить | Цитировать Сообщить модератору
 Re: Обновление инфы в таблицах  [new]
Sky1992
Member

Откуда:
Сообщений: 31
Владислав Колосов,

а можно какой-нибудь пример/ссылку посмотреть/почитать? Буду очень благодарен
14 май 14, 14:46    [16015762]     Ответить | Цитировать Сообщить модератору
 Re: Обновление инфы в таблицах  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
Владислав Колосов
Для таблиц можно создать справочники мета-данных и по ним запускать робота, который обработает одними и теми же алгоритмами эти мета-данные.
"Справочник Метаданных" можно представлять совершенно по разному.
К примеру вдруг окажется что все файлы сопоставляются по структуре 1 к 1му, по имени колонок и их типу.
Или другой вариант, можно создать N представлений которые сопоставляют названия колонок таблицы с названиями в файлах.
Или создать N таблиц, которые идентичны фалам, на них вешаются N view отображающие колонки с конвертицией на реальные таблицы.

При этом подходе динамика сведена к минимуму (что скулю на руку), а для уменьшения неразберихи, эти объекты базы создаются в отдельной схеме.
Т.е. используется встроенный механизм метаданных самой базы, намного легче поддерживать.
Про Extended Properties вообще молчу.

Как закачиваете?
Когда я писал систему закачек выкачек, я использовал XMLBulkLoad, и конвертор DbfXml. Всё самописное, но оно простое. Ибо у MS вечная проблема в провайдерами. На фоне того что это интерпрайз то решение сверх простое и при больших требованиям к разнообразию вариантов (типов файлов и способов доставки).

Но не в этом суть, лучше чтобы всё свестись к тому, что не нужно в динамике указывать названия столбцов, а только имя файла (с таким же названием таблицы). Тогда шаблон команд простой.
С другой стороны проблема у вас с синхронизаций чем с закачкой, ибо там как ни крути нужно перечислять колонки, тогда научится писать скрипты по генерации запросов.
Вообще генераторы запросов это повсеместная и частая практика. Притом не только TSQL но и для других языков. Освоить надо техники да ещё и надрочится.
Для 2005 и выше хорошо помогает агрегация строк через XML, довольно просто и компактно. Знать системные представления метаданных системы.

Далее в зависимости от навыков, можно точно автоматизировать (надо знать нюансы, быть профи), тогда можно делать постоянную динамику (при каждом запросе генерируется скрипт и выполняется) или кешированную (когда даже примерный генератор фигачит код один раз при установке/изменении, который сохраняется и постоянно используется).

Нюансы, которые сводят всё на нет:
- констраинты, FK, CK (порядок действий, устойчивость при отключении)
- не-модифицируемые колонки (вычисляемые, инкрементальные, тайстемпы)
- триггера и другие активные элементы
- активные параллельные операции
- ... и многое другое
Обходить каждый случай можно очень по разному, зависит от окружения.

Но в итоге всё сводится к проффесионализму. Так что порой "работает и не трогай" практично. Но может и лучше заказать халтурку у знающего.
15 май 14, 02:52    [16018755]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить