SQL Server 2008:将数据类型nvarchar转换为float时出错

use*_*167 3 floating-point casting nvarchar sql-server-2008

目前正在解决运行此SQL查询的问题:

UPDATE tblBenchmarkData 
SET OriginalValue = DataValue, OriginalUnitID = DataUnitID, 
    DataValue = CAST(DataValue AS float) * 1.335 
WHERE 
    FieldDataSetID = '6956beeb-a1e7-47f2-96db-0044746ad6d5' 
    AND ZEGCodeID IN 
             (SELECT ZEGCodeID FROM tblZEGCode 
              WHERE(ZEGCode = 'C004') OR 
                   (LEFT(ZEGParentCode, 4) = 'C004'))
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

消息8114,级别16,状态5,行1
错误将数据类型nvarchar转换为float.

真奇怪的是,如果我更改UPDATEto SELECT来检查检索的值是数值:

SELECT DataValue 
FROM tblBenchmarkData 
WHERE FieldDataSetID = '6956beeb-a1e7-47f2-96db-0044746ad6d5' 
AND ZEGCodeID IN 
         (SELECT ZEGCodeID 
          FROM tblZEGCode WHERE(ZEGCode = 'C004') OR 
                               (LEFT(ZEGParentCode, 4) = 'C004'))
Run Code Online (Sandbox Code Playgroud)

结果如下:

DataValue
2285260
1205310
Run Code Online (Sandbox Code Playgroud)

想要使用TRY_PARSE或类似的东西; 但是,我们运行SQL Server 2008而不是SQL Server 2012.有没有人有任何建议?TIA.

csm*_*118 5

查看tblBenchmarkData的模式定义会很有帮助,但您可以尝试在查询中使用ISNUMERIC.就像是:

SET DataValue = CASE WHEN ISNUMERIC(DataValue)=1 THEN CAST(DataValue AS float) * 1.335 
                     ELSE 0 END
Run Code Online (Sandbox Code Playgroud)