我有一个视图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的任何事情都会引发错误。
请帮我理解一下。
答案 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'