只有在sql中使用select top 1000查询时才会出现错误



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

有四个日期列具有此格式的数据'2015-04-30 00:00:00.000'

当我使用查询时

select * 
from xyz_view

我可以毫无问题地获得所有记录,但当我使用时

select top 1000 * 
from xyz_view

我得到一个错误:

消息245,级别16,状态1,第1行
将varchar值"2013-08-05 00:00:00.0"转换为数据类型int时转换失败。

即使select top 100 * from xyz_view也能工作。任何超过300的都会抛出上述错误。

请帮我理解这一点。

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

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

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

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

您的顶部<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'

最新更新