- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 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/
我正在使用在 SQL Server 2005 上运行良好的 Openquey,我有 1 台服务器是 SQL Server 2008,但它无法正常工作。 如果我运行以下命令: SELECT * FROM
我有下面的 openquery,它工作正常,但现在我只想使用 gl_trans.gl_trans_date 选择事务 >= '2017-07-01' 但无法获取正确的语法。后台数据库为Informix
我想将数据从 MS SQL Server 数据库传输到 MySQL 数据库。因此,我向 MS SQL 添加了一个链接服务器,以便我可以使用 Openquery 将数据插入 MySQL 数据库。我想优化
我有一个链接到 MSSQL 服务器的 MySQL 服务器,我正在尝试将数据插入 MySQL 服务器上的表 admin_user,但最终出现错误: Cannot process the object "
如何使用表变量作为 OPENQUERY 的参数 就像是: DECLARE @TSQL VARCHAR(8000) DECLARE @VAR TABLE (VAR1 VARCHAR (2)) INSER
我们正在尝试迁移到 SQL Server 2014。有几种情况我们需要使用 OpenQuery 来返回动态结果。结果集会根据不同的输入参数而有所不同。它在 sql 2008R2 中工作,我需要让它继续
如何在sql openquery中使用参数,例如: SELECT * FROM OPENQUERY([NameOfLinkedSERVER], 'SELECT * FROM TABLENAME whe
我已经尝试过这段代码,但仍然出现以下错误,也许有人可以帮忙? UPDATE a SET a.MMDWNO = '21' FROM OPENQUERY(NMIIFLIB, 'se
我有带有链接 Sybase 服务器的 SQL Server 2008,并且我正在尝试使用 OPENQUERY 在 Sybase 服务器上执行存储过程。如果我有一个不带参数的存储过程,它会成功。如果我有
我正在编写一个脚本,该脚本应该在一堆服务器周围运行并从中选择一堆数据,包括本地服务器。选择我需要的数据所需的 SQL 非常复杂,所以我正在编写一种临时 View ,并使用 OPENQUERY 语句来获
我正在尝试学习 openquery。我有一个 MSSQL 服务器,它有一个链接服务器 MySQL_testing。现在我整个早上都在与 openquery 语法作斗争,我想这里可能有更聪明的人知道它是
我有两个数据库MSSQL和MYSQL 我想将数据从 MYSQL 传输到 MSSQL,因此我在它们之间创建了链接服务器 在这一步之前我没有任何问题 我编写了以下代码,用于从 MYSQL 获取数据并插入到
我有一个动态存储过程,它为 OpenQuery 创建 mdx 语句。因此,mdx 语句中的对象可能为空。在本例中,我想要返回一个空字符串。 通常,查询会正常工作,除非我选择 future 的日期,在这
我的 MSSQL 触发器: ALTER TRIGGER [dbo].[ioTrigger_dbo_vsolv_mst_tproddtchng] ON [dbo].[vsolv_mst_tproddtc
我有一个OPENQUERY语句 SELECT * FROM OPENQUERY (NETLINE, 'SELECT * FROM XCREW.CTNAISV_HOTEL
我正在尝试使用“OPENQUERY”从 MS SQL Server 将记录插入 MySQL 数据库,但我正在尝试做的是忽略重复键消息。因此,当查询遇到重复项时,请忽略它并继续。 我可以做些什么来忽略重
不确定,这是否应该在 Stack Overflow 或 DBA 部分进行。 我正在编写的程序有问题。我有一个变量,可以说: SET @name sysname --also tried to make
我目前每天使用以下数据仓库一个表: DROP TABLE mytable SELECT firstcolumn, secondcolumn INTO mytable FROM OPENQUERY (m
试图找出为什么两者之间存在如此显着的差异 从linkedserver..tablename中选择* 和 select * from openquery(linkedserver, select * f
我需要使用参数(例如@PickedDate)从链接服务器检索数据。如果我跳过 @A 和 @B,查询工作正常,但由于缺少单引号,它总是返回错误。请指教,谢谢。 查询: Declare @OPENQUER
我是一名优秀的程序员,十分优秀!