【发布时间】:2017-03-22 12:41:51
【问题描述】:
这是 T-SQL 的一部分。我遇到了错误。谁能指导我。问题是因为 value 列是 nvarchar 数据类型
SELECT RuleID, SourceID, DataFileID, ChildCount, DP_State
FROM
(SELECT DP_State.RuleID, CAST(DP_State.SourceID AS VARCHAR(20)) AS SourceID, CAST(DP_State.DataFileID AS VARCHAR(20)) AS DataFileID, ChildCount, DP_State
FROM (
SELECT RuleID ,
RuleResultID ,
CASE WHEN ISNUMERIC(ISNULL([ResultValue], 0)) = 1 THEN
CAST(ISNULL([Value], 0) AS BIGINT)
ELSE
-1
END AS ChildCount,
我得到的错误:
【问题讨论】:
-
ISNUMERIC()is unreliable,SELECT ISNUMERIC(ISNULL([ResultValue], 0)), ResultValue看看哪里有意外1 -
嗨@AlexK。,我已经执行了 SELECT ISNUMERIC(ISNULL([ResultValue], 0)), ResultValue 并且列中有很多 1 和 ResultValue。
-
您可以使用 TRY_CAST() 而不是 CAST() 来查看在哪里获得 NULL VALUE(这是 TRY_CAST 不能转换的唯一值)。
-
查看我评论中的链接,
ISNUMERIC认为像'.'这样的值 是 数字,但将其转换为数字类型将失败,并出现您遇到的错误。 -
@AlexK.,没错,ISNUMERIC 认为 +- 也是数字
标签: tsql sql-server-2014