Можно ли создавать индексы с помощью выражений механизма выражений с использованием SQL? - PullRequest
3 голосов
/ 07 января 2011

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 07 января 2011

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

execute procedure sp_CreateIndex( 'test', null, 'idx1',
           'str(empid,6)+dtos(doh)', null, 0, 0 );   
1 голос
/ 10 января 2011

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

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

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

CREATE INDEX idx1 ON test( empid, doh )

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

1 голос
/ 07 января 2011

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

CREATE INDEX index_name ON table_name(column_name);

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

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

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

...