填充到一定数量

Posted

技术标签:

【中文标题】填充到一定数量【英文标题】:Populate until certain amount 【发布时间】:2012-02-28 03:54:06 【问题描述】:

我正在尝试创建一个过程,该过程将填满表格直到达到一定数量的元素。

目前我有

CREATE PROCEDURE PopulateTable(
    IN dbName           tinytext,
    IN tableName        tinytext,
    IN amount           INT)
BEGIN
    DECLARE current_amount INT DEFAULT 0;
    SET current_amount = SELECT COUNT(*) FROM dbName,'.',tableName;
    WHILE current_amount <= amount DO
        set @dll=CONCAT('INSERT INTO `',dbName,'`.`',tableName,'`(',
                        '`',tableName,'_name`) ',
                        'VALUES(\'',tableName,'_',current_amount,'\')');
        prepare stmt from @ddl;
        execute stmt;
        SET current_amount = current_amount + 1;
    END WHILE;
END;

所以我要做的是,一旦用户调用该过程,该函数将检查并查看当前存在多少元素,并填充剩余的元素。

我遇到的第一个问题是我不知道如何计算元素,所以我的SELECT COUNT(*) FROM dbName,'.',tableName; 不起作用。

我也想提出一个建议,因为我对数据库有点陌生,如果我所做的是正确的,或者是否有更好的方法来做到这一点?

如果这有帮助的话,我试图这样做的表只有 2 个字段,其中一个是 id,它是自动递增的并且是主要的,另一个是我正在填充的 profile_name。

感谢任何人的帮助!

【问题讨论】:

【参考方案1】:

首先,如果您尝试执行粘贴的代码,我认为您会遇到分隔符问题。过程声明分隔符必须与您在过程代码中使用的分隔符不同(此处为“;”)。您必须使用DELIMITER statement;

您的过程属于一个模式;我不确定您是否可以从其他 shemas 查询表(尤其是没有 USE 语句);

如果您的数据库包含不应通过您的过程填充的表,这不是一个好主意;

如果您的相关表数量有限,我认为为每个表定义一个过程会更好。这样,每个过程代码中的表名就明确了,避免了使用prepared statements;

小心你的“金额”参数:如果我将 INT 的最大值作为金额传递,你确定你的服务器可以处理请求吗?

我认为您应该在 WHILE 条件中使用 '

如果要插入大量行,执行“分组”插入或生成包含所有行并执行唯一 INSERT 的临时表(例如使用 MEMORY 引擎)将获得更好的性能选择临时表的内容。

【讨论】:

非常感谢!这是一个极好的洞察力,这对我帮助很大,而且比我做的工作更快!非常感谢,谢谢!

以上是关于填充到一定数量的主要内容,如果未能解决你的问题,请参考以下文章

CSS动态水平导航菜单填充特定宽度(表格行为)

仅将时间序列中的 NA 填充到有限的数量

计算要填充的可用插槽数量

一次显示一定数量的行,点击按钮,显示更多

按特定时间表重新填充帐户的实用程序

VBA从第一个空行到数据结束复制公式