【发布时间】:2017-05-06 23:42:28
【问题描述】:
当我使用SELECT * 运行以下查询时,我收到错误消息:
[S0005][8114] 将数据类型 nvarchar 转换为 bigint 时出错。
SELECT * FROM (
SELECT * , ROW_NUMBER() OVER (ORDER BY CAST(id as BIGINT)) AS RowNum
FROM users
) AS users
WHERE users.RowNum BETWEEN 0 AND 5 ;
当我仅使用 SELECT id , ROW_NUMBER() ... 运行此查询时,一切正常。
我的数据库如下所示:
此查询与id 列为NVARCHAR 的其他表一起运行良好
ID 列仅是数字,如果我将其转换为:CAST(id as NVARCHAR) 我得到同样的错误。
编辑:
我发现列 ID 值有问题
ID 46903836 ID 9100000004
小 id 没有前导零
【问题讨论】:
-
如果 ID 已经是
BIGINT,则无需将 ID 转换为BIGINT。如果它是NVARCHAR,你只需要转换它。如果您的ID字段中有一个字母,因为它是NVARCHAR,那么您将无法转换为数字。 -
嗯,错误信息很清楚。您的 varchar 中有一个不是有效 bigint 的值。这就是为什么您应该始终使用正确的数据类型。
-
如果您的图像 ID 是 BIGINT,为什么要将 ID 转换为 BIGINT?
-
我感觉您做错了什么,而您向我们展示的并不是错误的实际原因。我认为一些细节在途中丢失了......你确定你没有连接到两个数据库并以不同的方式查询它们吗?请放心,您的查询没有错,是列中的数据或数据类型。
-
除非 OP 正在试验窗口函数(总是鼓励),否则似乎还有很长的路要走 Select top 5 ... 按 ID 排序
标签: sql sql-server