我在MS SQL Server 2012中将ODBC数据源设置为链接服务器。在整个数据库中,大多数(但不是全部)数据类型为日期的列在运行查询时都会给您带来麻烦。查询除这些日期类型列之外的任何列,我没有任何问题。
以下查询:
SELECT *
FROM OPENQUERY(LINKEDSERVERNAME, 'SELECT Product,
DateLastReceipt
FROM ProductTable')
在SQL Server Management Studio(2012)中提供以下错误消息:
Msg 8114,Level 16,State 10,Line 1.将数据类型DBTYPE_DBDATE转换为日期时出错。
我尝试使用CONVERT将数据类型转换为varchar,而不是运气(相同的错误消息):http://social.technet.microsoft.com/Forums/en-US/transactsql/thread/3a7d94ee-46a0-40ce-ae95-127ec462fbff
现在,有一些完全相同的数据类型(日期)的列根本没有给我任何麻烦。例如,在我的ProductTable中,有一个名为AddedToFile的列,它显示了创建记录的日期。这个专栏给我带来了麻烦。
任何人可以提供的帮助都会非常感激。
感谢。
答案 0 :(得分:1)
希望这有帮助(我不使用SQL Server 2012) 如果您的ODBC链接到db2,则不支持日期范围,例如'0001-01-01',你需要施放。 通常这是有效的。
SELECT *
FROM OPENQUERY(LINKEDSERVERNAME, 'SELECT Product,
CAST(DateLastReceipt AS CHAR(10))
FROM ProductTable')
如果您仍希望将结果作为日期,只需使用CASE并将无效日期替换为默认日期。例如。
SELECT *
FROM OPENQUERY(LINKEDSERVERNAME, 'SELECT Product,
,CASE WHEN DateLastReceipt AS CHAR(10)) = ''0001-01-01''
THEN CURRENT_DATE
ELSE DateLastReceipt
END
FROM ProductTable')
您可能需要将CURRENT_DATE更改为CURRENT_TIMESTAMP,CASE组成取决于您的数据库服务器和您的要求