Как отключить все табличные индексы в SQL Server Compact Edition через объект SqlCeCommand? - PullRequest
4 голосов
/ 18 февраля 2009

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

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

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

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

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

Произошла ошибка при разборе запроса. [Номер строки токена = 1, строка токена смещение = 7, токен по ошибке = INDEX]

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

Спасибо

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

1 Ответ

6 голосов
/ 19 февраля 2009

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

DROP INDEX [TableName].IndexName

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

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

...