当我使用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为NVARCHAR)我得到相同的错误。
编辑:
我发现列ID值存在问题
人名46903836 ID 9100000004小ids没有前导零
答案 0 :(得分:2)
通常当我收到此错误时,这是因为列的正面或末尾有空格。以下是我修复它的方法。
SELECT * FROM (
SELECT * , ROW_NUMBER() OVER (ORDER BY CAST(LTRIM(RTRIM(id)) as BIGINT)) AS RowNum
FROM users
) AS users
WHERE users.RowNum BETWEEN 0 AND 5 ;
这将确保ID只是数字我也假设没有任何带有ID的字母字符。
答案 1 :(得分:1)
您的ID
字段为BIGINT
(您已发布表格结构),这不会导致您的问题出错。
但是,因为CAST
是不可用的,你可以按如下方式重写你的查询:
SELECT * FROM (
SELECT * , ROW_NUMBER() OVER (ORDER BY id) AS RowNum
FROM users
) AS users
WHERE users.RowNum BETWEEN 0 AND 5 ;
答案 2 :(得分:1)
您不需要转换id列,因为它已经是bigint数据类型