Я знаю, что это не было возможно в SQL 2005. Я не слышал ничего, что позволит вам сделать это в 2008 году, но это может быть там (я читал но еще не использовали его). Самое близкое, что я мог получить, - отключить индекс, но если вы отключите кластеризованный индекс, вы больше не сможете получить доступ к таблице. Не все это полезно, имхо.
Мое решение для нашего проекта складских проектов ETL заключалось в создании таблицы с перечислением всех индексов и ограничений индексирования (PKs, UQs). Во время ETL мы проходим через таблицу (для нужного набора загружаемых таблиц), отбрасываем индексы/индексирующие ограничения, загружаем данные, затем снова ходим по таблице и воссоздаем индексы/ограничения. Вид уродливый и немного неудобный, но после его запуска он не сломается - и имеет дополнительное преимущество только что построенных индексов (т. Е. Никакой фрагментации и fillfactor не может быть 100). Добавление/изменение/падение индексов также неудобно, но не все так сложно.
Вы можете сделать это динамически - прочитайте и сохраните определения индексов/ограничений из целевой таблицы, отбросьте их, загрузите данные, затем динамически создайте и запустите (повторно) создайте сценарии из ваших сохраненных данных. Но, если что-то падает во время пробега, вы так мертвы. (Вот почему я поселился на постоянных столах.)
Я считаю, что это очень хорошо работает с разбиением таблиц, так как вы выполняете всю работу над таблицами «Загрузка», а таблицы live (dbo, для нас) нетронуты.
Спасибо за информацию, это именно то, что я искал. Фактически этим утром коллега объяснил мне этот подход. – river0