2013-09-28 4 views
2

Мне нужно добавить вычисленный столбец к серверу SQL Server, чтобы перенести листинг поверх другого столбца в той же таблице. Есть ли лучший подход к достижению этого, или у кого-то есть лучшая идея?TryParse в вычисляемом столбце Sql Server

Важное примечание. Столбец StringValue имеет 5% или менее числовых значений, они должны обрабатываться как ноль.

ALTER TABLE dbo.Tabla ADD 
    ParsedValue AS case isnumeric(StringValue) when 1 then cast(StringValue as decimal(18,4)) else 0 end PERSISTED 
GO 

Спасибо заранее,

+0

Какая версия SQL Server? –

+0

Это SQL Server 2012, я не уверен, какой версии он будет пока. –

ответ

1

На SQL Server 2012 можно использовать TRY_CONVERT.

Это more reliable, а не isnumeric для этой цели.

ALTER TABLE dbo.Tabla 
    ADD ParsedValue AS ISNULL(TRY_CONVERT(decimal(18, 4), StringValue), 0) PERSISTED 

я считал бы не сделать это PERSISTED и не окружив его ISNULL для не числовых значений, хотя.

Обработка не числовых значений как: 0 скорее NULL означает, что, к примеру, AVG не являются правильными.

Нет необходимости помечать его как PERSISTED, чтобы создать индекс в этой колонке.

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