【问题标题】:Specific column -- Error converting data type nvarchar to bigint特定列 -- 将数据类型 nvarchar 转换为 bigint 时出错
【发布时间】: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


【解决方案1】:

如果您使用的是 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,
        )
    )

【讨论】:

  • @感谢您的帮助。它解决了我的问题。
  • 很高兴我能提供帮助。@SQLBoy
【解决方案2】:

通过首先检查[value]0 中的0,您正在隐式转换为整数。只有在那之后您才转换为整数,而是尝试以下操作:

根据字符串计算:

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

或者先转换成整数:

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

【讨论】:

  • 感谢您的回复@Aquillo,它帮助我意识到我的问题。
猜你喜欢
  • 2012-09-25
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多