我正在编写一个动态 MySQL 存储过程,它执行以下操作:在给定表 v_Tablename 中,如果 v_ColumnName 中等于 v_Value 的行数大于 0,则返回 true。否则,返回 false。
我怀疑问题可能是尝试为 v_Value 添加单引号,因为我在 v_ColumnName Email 中的 v_Tablename Employee 的数据库中添加了一个实例,其中 v_Value '[email protected]'。我预计运行此查询会产生 1 个结果。当我像这样在普通 SQL 中运行 SELECT 查询时:
SELECT COUNT(*) FROM Employee WHERE Email = '[email protected]';
这将返回 1 个结果(正确,符合预期)。
但是当我调用我的存储过程时:
CALL CheckValueExists('Employee', 'Email', '[email protected]', @result);
SELECT @result;
这将返回 0(不正确,不是预期的)。
我怀疑 v_Value 的单引号可能会导致此问题。这是我的代码:
create
definer = root@localhost procedure CheckValueExists(
IN v_Tablename VARCHAR(100),
IN v_ColumnName VARCHAR(100),
IN v_Value VARCHAR(100),
OUT v_Exists BOOLEAN
)
BEGIN
DECLARE v_Count INT;
SET @query = CONCAT('SELECT COUNT(*) FROM ', v_Tablename,
' WHERE ', v_ColumnName, ' = ?');
SET @v_Value = CONCAT('', v_Value, '');
PREPARE stat FROM @query;
EXECUTE stat USING @v_Value;
DEALLOCATE PREPARE stat;
-- Get the count from the variable @count
SELECT @count INTO v_Count;
-- Set v_Exists based on the count
IF v_Count > 0 THEN
SET v_Exists = TRUE;
ELSE
SET v_Exists = FALSE;
END IF;
END;
但即使我像 SET @v_Value = v_Value; 那样分配 v_Value;运行存储过程时我仍然得到 0 结果。有谁知道单引号是否会导致此问题,或者如果不是,存储过程未按预期运行的原因可能是什么? 预先感谢。
评论中的@Akina: 您无处将值分配给@count。尝试 .. CONCAT('SELECT COUNT(*) INTO @count FROM ', ..