Невозможно добавить индекс в постоянный вычисляемый столбец, потому что он «имеет тип, недопустимый для использования в качестве ключа»

) У меня есть такая таблица с вычисляемым столбцом:

CREATE TABLE PhoneNumbers
(
    [PhoneNumberID] int identity(1,1) not null primary key clustered,
    [Number] varchar(20), /* Entire number, like (800) 555-5000 */
    [Digits] AS dbo.RegExReplace(Number, '[^0-9]', '') PERSISTED  /* Like 8005555000 */
)

Он создан нормально, и столбец Digits отлично работает, как ожидалось, НО он, похоже, не ведет себя как столбец «PERSISTED». Когда я делаю запрос с Digits в предложение WHERE это ОЧЕНЬ медленно. Когда я пытаюсь добавить индекс в столбец Digits, я получаю: Столбец «Digits» в таблице «PhoneNumbers» имеет тип, который недопустим для использования в качестве ключевого столбца в индексе.

Похоже, что этот столбец на самом деле не рассматривается как PERSISTED, он пересчитывается для каждого запроса и не позволяет мне добавлять индекс.

RegExReplace - это функция C # CLR, определенная следующим образом:

[SqlFunction(IsDeterministic = true, IsPrecise = true)]
public static SqlString RegExReplace(SqlString expression, SqlString pattern, SqlString replace)

Есть идеи, как заставить столбец Digits работать как постоянный столбец или позволить мне добавить индекс ?!

Спасибо!

5
задан JerSchneid 31 January 2012 в 02:46
поделиться