【问题标题】:How to select from data with variable Database and Table如何从具有可变数据库和表的数据中进行选择
【发布时间】:2020-07-01 07:50:21
【问题描述】:

有没有办法从变量表名中选择数据库名和值?

我正在尝试通过以下方式检查列值是否存在。我强制这样做是因为表名和列名和值是可变的......

这用于存储过程文件。

我想要类似的东西:

SELECT 1
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_SCHEMA= 'database1'
      AND TABLE_NAME= 'table1'
      AND COLUMN_NAME = 'clmn_id_fk'
      AND 'database1.table1.clmn_id_fk'=2218

我找不到结果。

【问题讨论】:

  • 是可能的。假设你使用 php。只需将表名分配给一个变量,然后在你的 mysql 查询中使用该变量。
  • 感谢您的回复.. 但是此代码是由存储过程调用的

标签: mysql sql stored-procedures


【解决方案1】:

您可以从如下所示的存储过程中获得灵感。更改实现所需解决方案所需的一切,包括所有相关限制和验证非常重要。

/* CODE FOR DEMONSTRATION PURPOSES */

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_check`$$

CREATE PROCEDURE `sp_check`(`p_table_schema` VARCHAR(64), `p_table_name` VARCHAR(64), `p_column_name` VARCHAR(64), `p_value` INT)
BEGIN
    IF EXISTS (SELECT NULL
            FROM `information_schema`.`columns`
            WHERE `table_schema` = `p_table_schema` AND
            `table_name` = `p_table_name` AND
            `column_name` = `p_column_name`) THEN
        SET @qry := CONCAT('SELECT IF(COUNT(`', `p_column_name`, '`), 1, 0) AS `EXISTS` FROM `', `p_table_schema`, '`.`', `p_table_name`, '` WHERE `', `p_column_name`, '` = ', `p_value`);
        PREPARE stmt FROM @qry;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    ELSE
        SELECT 0 AS `EXISTS`;
    END IF;

END$$

DELIMITER ;

CALL `sp_check`('database1', 'table1', 'clmn_id_fk', 2218);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多