在子查询中将数据类型 nvarchar 转换为 bigint 时出错
Error converting data type nvarchar to bigint in subquery
给定 BIGINT
类型的变量 @myVariable
和来自 myTable
的 nvarchar(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) + '%'
但我建议使用兼容的类型。
前导零可能会造成问题。但是,您没有提供样本数据,所以我不知道这是否是一个问题。
给定 BIGINT
类型的变量 @myVariable
和来自 myTable
的 nvarchar(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) + '%'
但我建议使用兼容的类型。
前导零可能会造成问题。但是,您没有提供样本数据,所以我不知道这是否是一个问题。