我有一个视图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'