1

我在 MS SQL Server 2012 中将 ODBC 数据源设置为链接服务器。在整个数据库中,数据类型为日期的大多数(但不是全部)列在我运行查询时都会给我带来麻烦。查询这些日期类型列以外的任何列都没有任何问题。

以下查询:

SELECT *
FROM   OPENQUERY(LINKEDSERVERNAME, 'SELECT Product, 
                                           DateLastReceipt
                                    FROM   ProductTable')

在 SQL Server Management Studio (2012) 中给出以下错误消息:

消息 8114,级别 16,状态 10,第 1 行。将数据类型 DBTYPE_DBDATE 转换为日期时出错。

我已经尝试使用 CONVERT 将数据类型转换为 varchar 根据以下讨论没有任何运气(相同的错误消息): http ://social.technet.microsoft.com/Forums/en-US/transactsql/thread/3a7d94ee-46a0- 40ce-ae95-127ec462fbff

现在,有一些完全相同的数据类型(日期)的列根本不会给我带来任何麻烦。例如,在我的 ProductTable 中有一个名为 AdditionalToFile 的列,它显示了记录的创建日期。这个专栏完全没有给我带来麻烦。

有人可以提供的任何帮助将不胜感激。

谢谢。

4

1 回答 1

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 组合取决于您的数据库服务器和您的要求

于 2012-07-16T02:27:20.297 回答