仅在sql中使用select top 1000查询时才会出错

时间:2015-11-13 05:45:37

标签: sql sql-server view

我有一个视图xyz_view,它有大约16,000条记录。

有四个日期列,其格式为'2015-04-30 00:00:00.000'

当我使用查询

select * 
from xyz_view

我得到所有记录没有任何问题,但是当我使用

select top 1000 * 
from xyz_view

我收到错误:

  

Msg 245,Level 16,State 1,Line 1
  转换varchar值时转换失败' 2013-08-05 00:00:00.0'数据类型int。

即使select top 100 * from xyz_view也有效。超过300的任何事情都会引发错误。

请帮我理解一下。

2 个答案:

答案 0 :(得分:0)

我认为四列数据类型中的某些内容不是datetime类型。因为您的值为:'2013-08-05 00:00:00.0'

如果是datetime类型,则为:'2013-08-05 00:00:00.000'(毫秒数为3个数字)

在视图中,您可以将列转换或转换为日期时间类型,如下所示:

CAST(columns AS DATETIME)
CONVERT(DATETIME, columns)

答案 1 :(得分:-1)

你的顶级< 1000没有显示错误,因为它没有提取错误数据的行。

错误检查仅在您获取数据类型int的某个列中包含date值的行时才会运行 - 2013-08-05 00:00:00.0

运行Select声明检查此记录。

SELECT * FROM myTable
WHERE myColumn = '2013-08-05 00:00:00.0'

根据您看到的记录,决定是否将错误的2013-08-05 00:00:00.0更改为任何可接受的int

UPDATE myTable
SET myColumn = 123
WHERE myColumn = '2013-08-05 00:00:00.0'