Как отключить все индексы таблиц в компактной версии sql-сервера с помощью объекта SqlCeCommand?

StackOverflow https://stackoverflow.com/questions/562705

Вопрос

Я пытаюсь выполнить огромную массовую вставку в базу данных SqlCe (версия 3.5, да и с использованием C# 3).Я пробовал различные способы сделать это (вставка адаптера таблицы, подготовленный параметризованный запрос, вставка sqlceresultset и т. д.).Как я читал на многих сайтах, самое быстрое время было при использовании объекта SqlCeResultSet в прямом режиме таблицы.

Я хочу еще больше ускорить этот процесс, отключив все индексы в необходимых таблицах перед вставкой (затем я их перестрою).У меня возникла проблема с работой оператора ALTER INDEX (никогда не использовал его раньше, поэтому я уверен, что упускаю из виду что-то простое).

По сути, я создал SqlCeCommandObject и настроил оператор изменения следующим образом (объект Connection уже настроен, открыт и т. д.):

.
.
.
SqlCeCommand disableIndexCommand = Connection.CreateCommand();
disableIndexCommand.CommandText = "ALTER INDEX ALL ON ItemMaster DISABLE";
disableIndexCommand.ExecuteNonQuery();
.
.
.

Когда я пытаюсь запустить этот код, я получаю следующую ошибку:

Произошла ошибка при анализе запроса.Номер линии токена = 1, токеновая линия смещения = 7, токен в ошибке = индекс

Мне кажется, что он не понимает ключевое слово INDEX в операторе alter.Разве это не поддерживается в SqlCe?

Спасибо

[ОБНОВЛЕНИЕ] - Я пробовал другие операторы DDL (например, DROP INDEX, CREATE INDEX), и мне кажется, что ни один из них не работает?Я искал повсюду, пытаясь найти список того, что поддерживается, а что не поддерживается в SSCE, что касается операторов DDL.Не повезло.Кто-нибудь знает хорошие ресурсы для этого.Должен сказать, документация MS по sqlce Compact версии 3.5 оказалась совершенно бесполезной...

Это было полезно?

Решение

Синтаксис DROP INDEX в SqlServerCe:

DROP INDEX [TableName].IndexName

В SqlServerCe нет синтаксиса ALTER INDEX, поэтому, когда он говорит «анализ ошибок» в «INDEX», это потому, что он ищет «TABLE», единственное, для чего ALTER действителен в SqlServerCe.

РЕДАКТИРОВАТЬ: Что касается документации, лучший способ, который я нашел, — это скачать Книги онлайн.Если вы не используете 3.5 SP1, то посмотрите здесь для получения более полного списка доступных загрузок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top