2013-09-28 116 views
2

我需要將計算列添加到SQL Server數據表中,以在同一個表中的另一列上執行強制轉換。有沒有最好的方法來實現它或有人有更好的主意?Sql Server計算列中的TryParse

重要說明: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即可在此列上創建索引。