【问题标题】:Error when updating table in Sybase在 Sybase 中更新表时出错
【发布时间】:2010-08-19 02:54:42
【问题描述】:

我正在对 Sybase 表发出 UPDATE 语句,但出现以下错误:

消息 325,级别 18,状态 4: 服务器“开发”,第 1 行: Adaptive Server 找不到该语句的合法查询计划。如果摘要 计划是强制查询计划,检查它与查询的对应关系。如果不, 请联系 Sybase 技术支持。

这是我的更新声明。

 Update TABLE1 SET SAMPLECOL = (
   Select
   TABLE2.SAMPLECOL
   from TABLE2
   where
   TABLE2.COMMON_ID = TABLE1.COMMON_ID
 )
 where
 TABLE1.TABLE1_ID in (
   Select
   TABLE1.TABLE1_ID
   from TABLE1
   inner join TABLE2
   on TABLE1.COMMON_ID = TABLE2.COMMON_ID
   where TABLE1.SAMPLECOL = ''
 )

我们将不胜感激任何见解。

【问题讨论】:

    标签: sap-ase


    【解决方案1】:

    我认为问题在于您将列 SAMPLECOL 设置为可能返回多个值的内容。尝试这样做并将结果发布到这里:

    Update TABLE1 SET SAMPLECOL = (
       set rowcount 1
       Select 
       TABLE2.SAMPLECOL
       from TABLE2
       where
       TABLE2.COMMON_ID = TABLE1.COMMON_ID
       set rowcount 0
     )
    

    (这将只选择一个行记录,并且您的逻辑可能无法基于此工作,但是就您收到的错误而言,我确信与此有关)。再试一次,让我们知道结果。

    【讨论】:

    • 这也是我的猜测。 (除了我认为您的意思是多个值,而不是列对吗?)我还建议运行修改为 SELECT 而不是 UPDATE 的查询以查看返回的数据。这将揭示子查询是否返回非标量。
    • 嗨,当我使用上述语句时,我收到了错误消息 156,级别 15,状态 2:服务器“开发”,第 1 行:关键字“顶部”附近的语法不正确。
    • 您使用的是 Sybase 9 还是 11?
    • 我使用的是 Adaptive Server Enterprise/15.0.2
    • 好的,我在上面编辑了我的帖子 - 但这可能是在黑暗中拍摄...因为我在嵌套选择中使用行数。我希望我可以测试一下,但我没有 ASE15...
    【解决方案2】:

    试试吧;

    update TABLE1
       set SAMPLECOL = T2.SAMPLECOL
      from TABLE1 T1, TABLE2 T2
     where T1.COMMON = T2.COMMON
       and isnull(T1.SAMPLECOL, '') = ''
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2018-06-18
      • 2023-04-10
      • 1970-01-01
      • 2021-01-04
      • 2013-01-15
      相关资源
      最近更新 更多