为什么临时表工作但不是永久表?

时间:2012-04-19 13:13:33

标签: sql sql-server crystal-reports-2008 business-objects

根据公司政策,我为报告编写了一个SQL查询,该报告创建了一个永久表,然后执行一系列插入和更新以获取所有数据。它在SQL Server Management Studio和我的机器上的Crystal Reports 2008中运行良好。但是,当我将其安排在使用SAP BusinessObjects Central Management Console的服务器上运行时,它将失败,并显示错误“未准备好关联语句”。 我发现将此永久表更改为临时表使查询起作用。为什么会这样?

4 个答案:

答案 0 :(得分:1)

一些研究表明,有时会发送此错误而不是真正的错误。报告它的其他人谈论外键和(我也会假设)重复键错误。

我会检查的事情:

  • 您的永久表是否有可能违反的唯一约束?或任何外键约束?
  • 您是否在创建表后创建索引?
  • 您是否正在创建此永久表的任何视图?
  • 如果在作业运行之前表已经存在会发生什么?
  • 如果作业失败,会怎样?
  • 是否存在可能涉及其他临时或永久表的中间步骤(例如在存储过程中)?

ETA:还要检查永久表所属的模式:它通常是用“dbo”创建的吗?你明确指定了吗?是否有可能存在权限问题?

答案 1 :(得分:0)

这通常是一般错误。您是否能够将其作为计划运行的帐户在服务器上运行?这很可能是权限错误或约束问题。

答案 2 :(得分:0)

假设您确实需要一个常规表,为什么不能一次创建永久表,而不是每次运行查询时都创建它? 每次查询运行时重新创建常规用户表似乎不对。但为了使其工作,您可以尝试在单独的批处理或查询中重新创建表(例如,在脚本中放置GO,将其拆分为单独的查询)。

关于它为什么会发生,我正在考虑语句缓存。服务器编译查询并将结果存储一段时间,以防同一查询必须再次运行。所以我猜测它会尝试运行已编译的查询,该查询引用您已经删除并以相同名称重新创建的表。名称是相同的,但实际上它是一个新表。你可以通过这种方式点击服务器中的一些错误。只是一种猜测,它可能是另一种问题。

答案 3 :(得分:0)

没有看到代码这是一个猜测,但由于你每次都在创建一个永久表 你运行报告,我认为你必须在某个时候放弃表格? (或者随着时间的推移,你会有很多桌子。)

我建议考虑几个角度:

1)如果您担心并发/锁定问题等,请确保前缀表(可能是会话ID或其他内容),以便每个报表运行都有一个独有的表。

2)如果你在最后放下桌子,而是调整你的逻辑以离开桌子。编写在(重新)启动操作时丢失的代码。报告可能会紧紧抓住桌子而你正在过早地摧毁它。