gpt4 book ai didi

tsql - SQL Server OpenQuery() 的行为与来自 TOAD 的直接查询不同

转载 作者:行者123 更新时间:2023-12-02 02:50:03 25 4
gpt4 key购买 nike

使用 TOAD(使用 native Oracle 驱动程序)直接针对 Oracle 11 运行时,以下查询可以高效运行

select ... from ... where ...
and srvg_ocd in (
select ocd
from rptofc
where eff_endt = to_date('12/31/9999','mm/dd/yyyy')
and rgn_nm = 'Boston'
) ...
;

如果通过 openquery() 从 SQL Server 2008 传递到同一个 Oracle 数据库,则返回完全相同的查询“never”。 SQL Server 使用 Oracle Provider OLE DB 驱动程序具有到 Oracle 数据库的链接。

select * from openquery( servername, '
select ... from ... where ...
and srvg_ocd in (
select ocd
from rptofc
where eff_endt = to_date(''12/31/9999'',''mm/dd/yyyy'')
and rgn_nm = ''Boston''
) ...
');

查询未在合理的时间内返回,用户终止了查询。我不知道它最终是否会返回正确的结果。

直接 TOAD 查询高效工作且 openquery() 版本“从不”返回的结果是可重现的。

openquery() 进行小修改即可得到正确的高效结果:将 eff_endt 更改为 trunc(eff_endt)

这很好,但似乎没有必要进行更改。

openquery() 应该是通过的,那么 TOAD 和 openquery() 行为之间怎么会有区别呢?

我们关心的原因是因为我们经常使用 TOAD 直接访问 Oracle 来开发复杂的查询。查询正常运行并经过优化后,我们会将其转换为 openquery() 字符串,以便在 SQL Server 应用程序中使用。当我们知道它作为直接查询工作时,查询突然因 openquery() 失败是非常令人恼火的。然后我们必须通过反复试验来寻找解决方法。

我想查看这两个场景的 Oracle 跟踪文件,但 Oracle 服务器位于另一个组织内,并且我们没有得到 Oracle DBA 的合作。

有谁知道任何驱动程序,或 TOAD,或???哪些问题可以解释差异?有没有什么方法可以消除这个问题,使两种方法始终给出相同的结果?

最佳答案

我知道您不久前问过这个问题,但我刚刚遇到您的问题。

我同意,它们应该是相同的。显然是有区别的。我们需要找出差异在哪里。

我一边打字一边大声思考...

如果您只指定几列而不是 select * from openquery 会发生什么?

应该返回多少行?

如果在 oracle select 中限制返回的行怎么办?

openquery 超时多久?

TOAD 和 SS 在同一台机器上吗?您是否通过 RDPing 进入 SS 并从那里运行蟾蜍?

他们使用相同的驱动程序吗?包括位? (32/64) 版本?

他们在 Oracle 上使用相同的帐户吗?

有趣的是,使用 trunc() 会有所不同。我假设 [eff_endt] 是返回的字段之一?

我想知道 SS 是否正在取回所有行,但它在进行日期转换时感到窒息。 oracle中的日期类型可能需要转换为ss日期类型,然后ss才会显示给您。

如果将 openquery 中的行插入到日期字段只是 (n)varchar 的表中会怎样。我认为 ss 可能只是将从 Oracle 返回的日期转储到该文本字段中,而不尝试对其进行转换。

类似于:

insert into mytable(f1,f2,f3,datetimeX)
select f1,f2,f3,datetimeX from openquery( servername, '
select f1,f2,f3,datetimeX from ... where ...
and srvg_ocd in (
select ocd
from rptofc
where eff_endt = to_date(''12/31/9999'',''mm/dd/yyyy'')
and rgn_nm = ''Boston''
) ...
');

如果 toad 或 ss 在将查询语句发送到 oracle 之前修改它会怎么样。您可以启动wireshark并查看toad和ss实际发送的内容。

如果你能解决这个问题,我会很好奇。我经常把ss链接到oracle,没有遇到这个问题。

关于tsql - SQL Server OpenQuery() 的行为与来自 TOAD 的直接查询不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17978872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com