Tsql 特定列--将数据类型nvarchar转换为bigint时出错

Tsql 特定列--将数据类型nvarchar转换为bigint时出错,tsql,sql-server-2014,Tsql,Sql Server 2014,这是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

这是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,
我得到的错误是:


如果您使用的是SQL Server 2012或更高版本,请尝试此操作

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 TRY_CONVERT(INT, ISNULL([ResultValue],0)) IS NOT NULL
                    THEN CAST(ISNULL([Value], 0) AS BIGINT)
                ELSE - 1
                END AS ChildCount,
        )
    )

通过首先在
ISNULL()
中对
0
进行检查,可以隐式转换为整数。只有在强制转换为整数之后,才能尝试以下操作:

根据字符串求值:

CAST(ISNULL([Value], '0') AS BIGINT)
或第一次强制转换为整数:

ISNULL(CAST([Value] AS BIGINT), 0)

ISNUMERIC()
选择ISNUMERIC(ISNULL([ResultValue],0)),ResultValue
并查看哪里有意外的
1
Hi@AlexK.,我已经执行了SELECT ISNUMERIC(ISNULL([ResultValue],0)),ResultValue,一列中有许多1和ResultValue。您可以使用TRY\u CAST()代替CAST()若要查看从何处获得空值(这是vlaue TRY_CAST无法强制转换的值)。请参阅我的评论中的链接,
ISNUMERIC
认为类似于
”的值。
是数值型的,但将其强制转换为数值型将因遇到错误而失败。@AlexK.,这是正确的,ISNUMERIC将+-也视为numeric@Thanks谢谢你的帮助。它解决了我的问题。很高兴我能提供帮助。@sqlboy谢谢你的回复@Aquillo,它帮助我认识到我的问题。