1

変数テーブル名データベース名と値から選択する方法はありますか?

以下の方法で列の値が存在することを確認しようとしています。テーブル名と列名と値が可変であるため、この方法を強制しました...

これは、ストアド プロシージャ ファイルで使用されます。

私は次のようなものが欲しい:

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

私は結果を見つけることができません。

4

1 に答える 1

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);
于 2013-10-30T13:28:00.887 に答える