Tsql 特定列--将数据类型nvarchar转换为bigint时出错
这是T-SQL的一部分。我得到以下错误。有人能给我指点一下吗?问题是因为value列属于nvarchar数据类型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
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,它帮助我认识到我的问题。