MS SQL Server 中的链接 Informix 表忽略标准?

Posted

技术标签:

【中文标题】MS SQL Server 中的链接 Informix 表忽略标准?【英文标题】:Linked Informix table in MS SQL Server ignoring criteria? 【发布时间】:2010-08-02 12:20:32 【问题描述】:

我在 MS SQL Server 2008r2 中遇到了链接 Informix 表的问题。当我查询这个表时,它似乎忽略了我传递给它的一些标准,但没有忽略其他标准。例如,如果我在 rowdate 字段上设置条件,则执行计划的远程查询部分不会显示任何 WHERE 子句,但如果我将条件放在另一个字段(例如 ACD)上,它会显示。

它似乎没有通过 rowdate 字段的任何标准,但在所有其他字段上都通过了。

我知道该字段在 Informix 端被索引。如果它有助于我链接的表来自 Avaya CMS,它是通过 OpenLink ODBC 驱动程序链接的。

编辑:

据我所知,它是 Informix Dynamic Server 2000,它在 Solaris 上。该列作为正确的 DATE 数据类型出现。我尝试通过“2010-08-03 00:00:00”、“2010-08-03”、CONVERT(date,'2010-08-03') 和更多变体等标准。当数据返回到 SQL Server 时,其格式为 yyyy-mm-dd。

当我查看执行计划时,我可以看到包含所有其他条件的远程查询,后跟仅针对 rowdate 字段的过滤器。

我知道 rowdate 已编入索引,并且驱动程序通常会在我们在其他应用程序(业务对象和 MS Access)中使用它时传达该信息,并且它们没有问题

【问题讨论】:

哪个版本的 Informix 在哪个平台上? “rowdate”的类型是什么?猜测是 DATE,但它可能是 DATETIME 的变体之一,例如 DATETIME YEAR TO DAY 或 DATETIME YEAR TO SECOND。驱动程序是否以相同的方式处理任何其他相同类型的列? 表面上这听起来像是“客户端”方面的问题;也就是说,如果驱动程序不发送标准,服务器就不能使用它。您可能想探索如何执行 SET EXPLAIN ON,以便您可以看到 Informix DBMS 将什么视为 SQL,以便与您认为应该看到的进行比较。 【参考方案1】:

我设法弄清楚了,但这是有史以来最奇怪的事情。我走上了以不同格式传递日期的路线。我的默认设置是使用正常的 YYYY-MM-DD,这当然不起作用,所以我尝试了 YYYY-MMM-DD,仍然没有。在经历了很多组合之后,我找到了一个有效的 Mmm-DD-YY,它必须是这样的! SEP-21-2010 不起作用,但 Sep-21-2010。

我想知道这是否只是 Informix 的一个奇怪的挂起或驱动程序中的某些东西,无论如何它可以工作。

顺便说一句,有没有人注意到美国人写日期月份,日期年份是多么奇怪?停下来想一想,你说2410这个数字是“四百、十、两千”吗?最好的部分是试着问自己,美国独立日是哪一天?大多数美国人说“这很容易,你这个人,现在是 7 月 4 日”嗯,日月(年),他们说的唯一正确的日期是他们获得独立的日期。我将把它留给 SO 社区来看看其中的讽刺意味

【讨论】:

【参考方案2】:

下面的示例查询:

select *
from OPENQUERY (AVAYA, 'select row_date,starttime,intrvl,acd from root.hagent where
row_date = ''NOV-22-2012'' and acd = 1 and split = 1 and starttime = 1900')

顺便说一句,我设法通过 MMM-DD-YYYY 和 Mmm-DD-YYYY 提取了准确的数据。

【讨论】:

以上是关于MS SQL Server 中的链接 Informix 表忽略标准?的主要内容,如果未能解决你的问题,请参考以下文章

将多用户环境中的表中的 ms 访问数据附加到 sql server 表中

MS SQL Server 中的组连接

需要在 MS Access 中使用链接表更改 sql server 数据库名称

MS Access 直通选择查询导致 SQL Server 中的页面锁定

将 MS SQL Server 图像数据移动到 MySQL longblob

MS Access:来自 SQL Server 的只读链接表?