我有一个SQL Server 2005,它有一个“链接服务器”到另一个SQL Server 2005.
当我针对链接服务器在其中一个表上运行简单查询时:
SELECT TOP 10 [Pat_Id]
FROM [Prod].[PIS].[dbo].[W_PATIENT]
发生此错误:
Msg 8114, Level 16, State 8, Line 1
Error converting data type DBTYPE_DBTIMESTAMP to datetime.
Msg 8114, Level 16, State 8, Line 1
Error converting data type DBTYPE_DBTIMESTAMP to datetime.
但是,当我使用OPENQUERY时,它可以工作:
SELECT * FROM OPENQUERY([Prod], 'SELECT TOP 10 [Pat_Id] FROM [PIS].[dbo].[W_PATIENT]')
W_PATIENT表没有任何'TIMESTAMP'类型的字段。它确实有5个DATETIME字段。
还要注意我可以使用DATETIME值查询其他表而没有问题。问题集中在W_PATIENT表上。
答案 0 :(得分:1)
是否有可能某些DATETIME字段有“错误的条目”,超出范围等。例如,如果其中一个实际上是一个内部带有“垃圾”的字符串? 在远程服务器上执行打开查询,只返回结果;使用select时,数据会被传输,因此会应用数据转换。
我会考虑在w_patient表上进行一些数据分析。如果您有SQL Server 2008,SSIS中有一个数据分析任务,但您也可以找到其他工具来检查数据质量。
答案 1 :(得分:0)
就我而言,在 MySQL 方面,有一些日期值为 0000-00-00 00:00:00(默认),但无法在 MSSQL 上转换为 DateTime2。如果相应地配置了 NO_ZERO_DATE,MySQL 允许此值。
我必须将这些零值更新为 DateTime2 最小值才能使其正常工作。