MySQL ROW_COUNT() 在 Prepare 语句中不起作用

标签 mysql stored-procedures rowcount rows-affected

我在做什么。

我有一个删除行的过程。

我得到 var_SelectedIds 作为 , 分隔 UUID()

然后

SET     @var_SQLStr = '';   
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'Delete ');
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'FROM DemoTable');        
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'WHERE DemoTableId IN (''',Replace(var_SelectedIds,',',''','''),'''); ');

-- SELECT @var_SQLStr;
PREPARE stmt FROM @var_SQLStr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

我已经尝试过的。

// This is throwing SQL Syntax ERROR.

SET     @var_SQLStr = '';   
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'Delete ');
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'FROM DemoTable');        
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'WHERE DemoTableId IN (''',Replace(var_SelectedIds,',',''','''),'''); ');
SET     @var_SQLStr = CONCAT(@var_SQLStr ,' SELECT ROWS_COUNT() INTO @var_AffectedRows; ');

-- SELECT @var_SQLStr;
PREPARE stmt FROM @var_SQLStr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

MySQL Reference

The text must represent a single statement, not multiple statements.

我也试过

START TRANSACTION;

-- Other statements here

SET     @var_SQLStr = '';   
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'Delete ');
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'FROM DemoTable');        
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'WHERE DemoTableId IN (''',Replace(var_SelectedIds,',',''','''),'''); ');

-- SELECT @var_SQLStr;
PREPARE stmt FROM @var_SQLStr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SELECT ROW_COUNT() INTO @var_AffectedRows
COMMIT;

SELECT @var_AffectedRows AS NoOfRowsDeleted; // 0 output

我不知道行是如何被删除的。

最佳答案

您需要在 EXECUTE 之后和 DEALLOCATE... 之前立即执行 SELECT ROW_COUNT()

START TRANSACTION;

-- Other statements here

SET     @var_SQLStr = '';   
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'Delete ');
SET     @var_SQLStr = CONCAT(@var_SQLStr ,'FROM DemoTable');        
SET     @var_SQLStr = CONCAT(@var_SQLStr ,' WHERE DemoTableId IN (''',Replace(var_SelectedIds,',',''','''),'''); ');
/*you need an additional whitespace here---^ */


-- SELECT @var_SQLStr;
PREPARE stmt FROM @var_SQLStr;
EXECUTE stmt;
SELECT ROW_COUNT() INTO @var_AffectedRows;
DEALLOCATE PREPARE stmt;

SELECT @var_AffectedRows; /*TADAAA!*/

COMMIT;

关于MySQL ROW_COUNT() 在 Prepare 语句中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33208372/

相关文章:

php - 如何将多个条目关联到另一个表中的另一个条目?

sql - SQL选择一行并存储在SQL变量中

mysql存储过程语法错误

mysql - 使用 vb.net 从 mySQL 数据库截断选定的表

mysql - SQL,通过删除具有最低值的行来限制总行数

mysql - 为什么我的存储过程不使用我传递给它的参数? - MySQL

python - 插入 SQLite 数据库的行数为负数

c++ - QFileSystemModel rowCount 不能按预期工作

python - (1054, "Unknown column ' 日期'在 'field list'")