我有火鸟4.0,正在从HeidiSQL查询.仅在两次嵌套联接之后,HeidiSQL返回:

Sql错误(335544794):[FireDAC][Phys][fb]操作已取消 语句级超时已过期.

我相信查询只会运行一秒钟多一点.在谷歌了一下之后,我发现把"语句超时"改成了SET STATEMENT TIMEOUT 1000 SECOND;.由于某种原因,这条消息仍然出现,似乎Firebird忽略了我的声明.

HeidiSQL中的完整查询:

SET STATEMENT TIMEOUT 1000 SECOND;

SELECT FIRST 100 * FROM STAGE_TABLE
LEFT OUTER JOIN DIM_TABLE ON STAGE_TABLE.ID = DIM_TABLE.ID
LEFT OUTER JOIN FACT_TABLE ON STAGE_TABLE.ID = FACT_TABLE.ID;

SELECT加上第一个JOIN大约需要半秒,添加第二个JOIN RUN INTO EXPIRED语句.似乎HeidiSQL或Firebird忽略了我的第一个SQL命令.我怎么才能解决这个问题呢?

推荐答案

我可以复制它,甚至without次执行SET STATEMENT TIMEOUT 1000 SECOND;次.问题是,HeidiSQL的(默认)查询超时设置为30(无单位),并且似乎在执行语句时传递此设置,而没有考虑到Firebird预期的毫秒数.

换句话说,Firebird收到一条指令来执行该语句,超时时间为30milliseconds,这是相当短的时间.这将导致"operation was cancelled Statement level timeout expired."错误.

这是因为在EXECUTE时传递的非零超时优先于您设置为SET STATEMENT TIMEOUT的会话级语句超时(不过,如果它大于非零的数据库级语句超时,它将使用数据库级语句超时).

要解决这个问题,在HeidiSQL的会话管理器中, Select 您的Firebird服务器,转到"Advanced"选项卡,然后在"Query Timeout"中输入0(表示没有语句级超时),或者输入所需的超时值(考虑到它是milliseconds).

Screenshot of the Advanced tab of a Firebird database in the HeidiSQL Session Manager, the Query timeout setting is set to zero and hihglighted

Sql相关问答推荐

SQL查询以条件空值跟踪生产操作结果进展

如何使用ROW_NUM() Select 一个没有第二条记录的实例?

为什么在postgres中,横向连接比相关子查询快?

从数据库中查找总和大于或等于查询中的数字的数字

将Dense_RANK列为聚合(非解析)函数(&A)

如何使用SQL Server中的Nodes()方法执行与OPENXML相同的操作

用VB.NET在Dapper中实现MS Access数据库顺序透视

从重复值中获取最新值

DB2 SQL查询结果多余数据

AdventureWorks 查询

snowflake中的动态文件名生成

如何在 JSONB 数组的每个对象中添加新的键值对- PostgreSQL

如何使用SELECT语句进行左连接,并根据右表中的特定值过滤结果?

标量子查询中的窗口函数不起作用

IN子句使用的表值用户定义函数参数

为什么在事务中未被后续使用的CTE执行SELECT...FOR UPDATE无效?

自动生成计算频率的列

字符串从更改到表列和查询中的一行的转换错误

在时态表和非时态表之间使用 EXCEPT 的 SQL 子查询给出表达式错误数

SQL:有没有办法根据另一列的数据细节过滤和形成另一列?