Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Sky1992 Member Откуда: Сообщений: 31 |
Добрый день. Есть задача обновить n-е кол-во таблиц данными из dbf-файлов. Операции одни и те же для всех таблиц - проверки и дальнейший update/insert записей. Сейчас это реализовано IF-ами в одной хранимке для всех таблиц. Вопрос в следующем - можно ли как-то реализовать, чтобы в хранимке было не n-e кол-во IF-ов на каждую таблицу, а как-то свернуть - чтобы для некоего набора таблиц выполнялся один и тот же набор операций? Если нет - то нет, если можно, то буду рад любому примеру в виде кода/ссылки=) |
14 май 14, 14:19 [16015538] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
У вас что n-е кол-во таблиц, в которых все одинаково, кроме имени таблицы ? |
||
14 май 14, 14:27 [16015579] Ответить | Цитировать Сообщить модератору |
Гадя Петрович Member Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали Сообщений: 52912 |
https://www.sql.ru/faq/faq_topic.aspx?fid=104 |
14 май 14, 14:27 [16015582] Ответить | Цитировать Сообщить модератору |
Sky1992 Member Откуда: Сообщений: 31 |
Glory, нет, n-е кол-во таблиц вообще. В каждой таблице все разное. |
14 май 14, 14:30 [16015617] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А как тогда можно для двух разных таблиц выполнить "одинаковый набор операций" ? |
||
14 май 14, 14:31 [16015627] Ответить | Цитировать Сообщить модератору |
Sky1992 Member Откуда: Сообщений: 31 |
Glory, никак) на всякий случай спросил - вдруг как-то извратившись это возможно. Ну, на "нет" и суда нет. |
14 май 14, 14:35 [16015665] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8317 |
Для таблиц можно создать справочники мета-данных и по ним запускать робота, который обработает одними и теми же алгоритмами эти мета-данные. |
14 май 14, 14:41 [16015715] Ответить | Цитировать Сообщить модератору |
Sky1992 Member Откуда: Сообщений: 31 |
Владислав Колосов, а можно какой-нибудь пример/ссылку посмотреть/почитать? Буду очень благодарен |
14 май 14, 14:46 [16015762] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
К примеру вдруг окажется что все файлы сопоставляются по структуре 1 к 1му, по имени колонок и их типу. Или другой вариант, можно создать N представлений которые сопоставляют названия колонок таблицы с названиями в файлах. Или создать N таблиц, которые идентичны фалам, на них вешаются N view отображающие колонки с конвертицией на реальные таблицы. При этом подходе динамика сведена к минимуму (что скулю на руку), а для уменьшения неразберихи, эти объекты базы создаются в отдельной схеме. Т.е. используется встроенный механизм метаданных самой базы, намного легче поддерживать. Про Extended Properties вообще молчу. Как закачиваете? Когда я писал систему закачек выкачек, я использовал XMLBulkLoad, и конвертор DbfXml. Всё самописное, но оно простое. Ибо у MS вечная проблема в провайдерами. На фоне того что это интерпрайз то решение сверх простое и при больших требованиям к разнообразию вариантов (типов файлов и способов доставки). Но не в этом суть, лучше чтобы всё свестись к тому, что не нужно в динамике указывать названия столбцов, а только имя файла (с таким же названием таблицы). Тогда шаблон команд простой. С другой стороны проблема у вас с синхронизаций чем с закачкой, ибо там как ни крути нужно перечислять колонки, тогда научится писать скрипты по генерации запросов. Вообще генераторы запросов это повсеместная и частая практика. Притом не только TSQL но и для других языков. Освоить надо техники да ещё и надрочится. Для 2005 и выше хорошо помогает агрегация строк через XML, довольно просто и компактно. Знать системные представления метаданных системы. Далее в зависимости от навыков, можно точно автоматизировать (надо знать нюансы, быть профи), тогда можно делать постоянную динамику (при каждом запросе генерируется скрипт и выполняется) или кешированную (когда даже примерный генератор фигачит код один раз при установке/изменении, который сохраняется и постоянно используется). Нюансы, которые сводят всё на нет: - констраинты, FK, CK (порядок действий, устойчивость при отключении) - не-модифицируемые колонки (вычисляемые, инкрементальные, тайстемпы) - триггера и другие активные элементы - активные параллельные операции - ... и многое другое Обходить каждый случай можно очень по разному, зависит от окружения. Но в итоге всё сводится к проффесионализму. Так что порой "работает и не трогай" практично. Но может и лучше заказать халтурку у знающего. |
||
15 май 14, 02:52 [16018755] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |