У меня есть такая таблица с вычисляемым столбцом:
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, это ОЧЕНЬ медленно.Когда я пытаюсь добавить индекс в столбец «Цифры», я получаю: Column 'Digits' in table 'PhoneNumbers' is of a type that is invalid for use as a key column in an index.
Кажется, что этот столбец на самом деле не обрабатывается как PERSISTED и пересчитывается для каждого запроса и не позволяет мне добавлятьиндекс.
RegExReplace - это функция C # CLR, определенная следующим образом:
[SqlFunction(IsDeterministic = true, IsPrecise = true)]
public static SqlString RegExReplace(SqlString expression, SqlString pattern, SqlString replace)
Любые идеи о том, как заставить этот столбец Digits
действовать как постоянный столбец или разрешить мне добавить индекс?!
Спасибо!