) У меня есть такая таблица с вычисляемым столбцом:
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
работать как постоянный столбец или позволить мне добавить индекс ?!
Спасибо!