4

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

4

4 回答 4

1

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

我要检查的事情:

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

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

于 2012-04-22T19:56:15.897 回答
0

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

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

于 2012-04-19T14:12:36.890 回答
0

在没有看到代码的情况下这是一个猜测,但是由于您每次运行报告时都在创建一个永久表,所以我假设您必须在某个时候删除该表?(或者随着时间的推移,你会建立很多表。)

我建议考虑几个角度:

1) 如果您担心并发/锁定问题等,请确保为表格添加前缀(可能通过会话 ID 或其他内容),以便每个报告运行都有一个专属于自己的表格。

2)如果您最后要删除表格,请调整您的逻辑以保留表格。编写在您(重新)开始操作时丢弃的代码。报告可能会紧贴在桌子上,而您正在过早地销毁它。

于 2012-04-20T02:56:15.890 回答
0

这通常是一个通用错误。您是否能够在服务器上以计划运行的帐户运行它?这很可能是权限错误或约束问题。

于 2012-04-19T13:16:00.047 回答