gpt4 book ai didi

firebird - 更新发电机值(value)问题

转载 作者:行者123 更新时间:2023-12-04 16:40:55 26 4
gpt4 key购买 nike

我目前正在修改Firebird 1.5版数据库。

数据库结构将通过使用Interbase组件从delphi应用程序运行查询进行修改,我面临的问题是我需要运行很多查询,其中一些查询包括创建生成器和更新生成器值,问题是我需要在尽可能少的查询中实现此目标,但是(至少对我而言)这似乎是不可能的,我正在尝试执行以下操作:

 /* this command creates a generator to be used for table TABLENAME */
CREATE GENERATOR GEN_TABLENAME;

因此,我创建了一个生成器,现在需要将其值设置为表TABLENAME中的当前最大ID,如下所示:
/* one would expect that the following command would work, well it doesn't */
SET GENERATOR GEN_TABLENAME TO (SELECT MAX(ID) FROM TABLENAME);

现在,是否有任何解决方法,还是我被迫:
  • 创建生成器
  • 获取最大ID
  • 更新生成器值

  • 并为每个表重复该过程?

    我也期望
    SELECT
    SELECT MAX(ID) AS ID_TABLENAME_1 FROM TABLENAME_1,
    ...
    SELECT MAX(ID) AS ID_TABLENAME_N FROM TABLENAME_N

    将是一种解决方法,可以在一个命令中从每个表中获取最大ID,但事实并非如此。

    最佳答案

    陈述

    SET GENERATOR GEN_TABLENAME TO (SELECT MAX(ID) FROM TABLENAME);

    混合使用DDL( SET GENERATOR)和DML( SELECT),AFAIK通常不支持,而Firebird肯定不支持。

    如果您可以升级到最新版本的Firebird,则可以使用 EXECUTE BLOCK和/或 EXECUTE STATEMENT在一个语句中和服务器端完成所有操作,但是对于Firebird 1.5,您需要花很长的时间解决(一个语句才能获得当前最大值,然后另一个更新生成器)。

    关于firebird - 更新发电机值(value)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8487018/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com