在子查询中将数据类型 nvarchar 转换为 bigint 时出错

Error converting data type nvarchar to bigint in subquery

给定 BIGINT 类型的变量 @myVariable 和来自 myTablenvarchar(200) 类型的 myColumn 失败:

WHILE (EXISTS (SELECT * FROM myTable WHERE LEFT(CONVERT(bigint,myColumn),17) = @myVariable))

标题错误:

Error converting data type nvarchar to bigint.

完整查询如下所示:

DECLARE @myVariable BIGINT
SET @myVariable = (SELECT CurrentNumber FROM MyNumbers)
WHILE (EXISTS (SELECT * FROM myTable WHERE LEFT(CONVERT(bigint,myColumn),17) = @myVariable))
BEGIN
    SET @myVariable = @myVariable + 1
END

我也用 CAST(myColumn as BIGINT) 尝试过,但也失败了。

这没有意义:

LEFT(CONVERT(bigint, myColumn),17) = @myVariable

为什么要对数字调用字符串函数?也许你打算:

CONVERT(bigint, LEFT(myColumn, 17)) = @myVariable

无论如何,我认为你应该传入一个字符串。假设 myColumn 是一个字符串。类似的东西:

myColumn LIKE @myVariable + '%'

当然你也可以传入一个数字然后使用:

myColumn LIKE convert(varchar(255), @myVariable) + '%'

但我建议使用兼容的类型。

前导零可能会造成问题。但是,您没有提供样本数据,所以我不知道这是否是一个问题。