【问题标题】:Openquery Hung at Same Row NumberOpenquery挂在同一行号
【发布时间】:2017-12-19 18:34:12
【问题描述】:

我正在尝试在 SQL Server 17 中通过链接服务器到 Oracle 连接源运行 openquery。当我运行下面发布的查询时,它每次都会卡在 row 7833

查询:

SELECT 
    sys_ohi, 
    "Region", 
    sub_acct_no_ohi, 
    serv_cde_ohi, 
    connect_dte_ohi, 
    charge_amt_ohi 

FROM openquery (MyServer, ' 
(SELECT DISTINCT 
    sys_ohi, 
CASE 
    WHEN prin_ohi = ''1000'' THEN ''Seattle East'' 
    WHEN prin_ohi = ''1500'' THEN ''Seattle West'' 
    WHEN prin_ohi = ''2000'' THEN ''Oregon'' 
    WHEN prin_ohi = ''3000'' THEN ''Sacramento''
    WHEN prin_ohi = ''3500'' THEN ''San Francisco'' 
        END AS "Region", 
    sub_acct_no_ohi, 
    serv_cde_ohi, 
    connect_dte_ohi, 
    charge_amt_ohi 

FROM mytable_ohi

WHERE serv_cde_ohi IN (''INSTALL'')
AND connect_dte_ohi > trunc(to_date(''06-01-2017'',''MM-DD-YYYY'')))')

我有 36 个不同的 serv_cde_ohi IN (''INSTALL''),但我已经为不同的场景创建了 36 个 UNION ALL 查询,因为尝试将它们放在“IN”语句中对性能来说很糟糕。

我需要知道为什么这个查询会卡在同一个地方。

【问题讨论】:

  • “卡住”是什么意思?
  • 在 Microsoft SQL Server 中,查询完成一旦到达第 7833 行就会停止运行;但是,查询的状态是“正在执行查询”。当我检查活动监视器时,它在 RUNNING 任务和 SELECT 命令中“卡住”。在我取消它并完全重新启动服务器之前,查询不会停止。
  • 如果您在MyServer 上运行查询,它是否正确完成?
  • 是的 - 我确保大型 UNION ALL(当然还有每个单独的查询)查询首先在此服务器上运行,然后再将其移动到 SQL Server。我正在尝试在 Microsoft SQL Server 中处理此查询以创建一个表并在 SSRS 中使用它。

标签: sql sql-server openquery


【解决方案1】:

您的 UNION ALL 声明可能依赖于隐式数据转换才能开始执行,然后在游标提取期间出现数据条件,其中隐式转换以您正在观察的这种方式失败。

消除所有隐式依赖。对于每个 SELECT 中的每个项目,显式建立数据类型(每个项目的类型相同,当然通常是)。

【讨论】:

  • 感谢您的回复。你是对的,它与日期的数据转换有关。我从 Oracle 中提取,这个数据库的日期格式与我在 Microsoft SQL Server 中提取的不同。感谢您的回答,它让我重新评估了日期字段,它现在正在工作。
  • @cbrown92 很高兴听到。日期值的隐式转换最终会影响到每个人。尽管我想澄清一下,Oracle 和 SQL Server 并没有“不同的日期格式”。在数据保管链中的某个位置,日期值只是字符串(而不是日期数据类型),或者日期值是日期数据类型,这些数据类型被转换为具有意外/隐式格式模式的字符串(并且可能返回数据数据类型)。
  • 非常感谢您的跟进,迈克尔!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
相关资源
最近更新 更多