2011-01-07 2 views
3

Мы пытаемся создать индекс в таблицах CDX и ADT, в которых используется механизм выражения Advantage.Можно ли создавать индексы с выражением выражений с использованием SQL?

Код, который мы пытались до сих пор выглядит следующим образом:

CREATE INDEX IDX1 ON TBL1 (STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD)); 

Можно ли создать индекс с выражением STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD) с использованием SQL?

Мы пробовали использовать выражение с двойными кавычками, одинарные кавычки и скобки.

ответ

5

Вы можете использовать системную процедуру sp_CreateIndex, чтобы сделать это:

execute procedure sp_CreateIndex('test', null, 'idx1', 
      'str(empid,6)+dtos(doh)', null, 0, 0); 
1

Синтаксис скелет

CREATE INDEX index_name ON table_name(column_name); 

Так две вещи должны произойти для вашего кода для работы.

  1. Ваше выражение должно оцениваться до имени существующего столбца.
  2. Ваши dbms должны принимать выражения в именах столбцов.

Я думаю, что большинство dbms не принимают выражения для имен столбцов. Но, возможно, вы можете оценить выражение и представить правильную строку SQL вместо этого.

+0

+1 Не решение моей проблемы, но, безусловно, хорошее объяснение, почему это не работает. –

1

Ответы от Марка на месте.

Одна вещь, о которой вам следует знать с индексом выражений в ADT, состоит в том, что любое нулевое значение в выражении будет отображать результат всего выражения null. Это иногда вызывает проблему перехода разработчика с CDX на ADT, поскольку значение NULL поддерживается в таблице ADT. Например, результат вышеуказанного выражения будет NULL, если либо empid, либо doh равно NULL.

Еще одна вещь, о которой следует помнить, заключается в том, что определенный индекс выражения не может использоваться для оптимизации SQL. Если вы собираетесь в основном с помощью SQL для управления данными, может быть, лучше создать индекс, используя стандартный синтаксис SQL:

CREATE INDEX idx1 ON test(empid, doh) 

Сервер будет заботиться о используя правильное выражение для CDX и ADT индекса. И индекс будет использоваться SQL-движком для оптимизации выбора данных.

+0

Спасибо за хорошие баллы. Однако в нашем случае мы должны указать выражение вручную, потому что оно предназначено для инструмента реорганизации индекса. –

Смежные вопросы