MySQL ROW_COUNT() 在 Prepare 语句中不起作用
MySQL ROW_COUNT() not working in Prepare statement
我在做什么。
我有一个删除行的过程。
我得到 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;
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;
我在做什么。
我有一个删除行的过程。
我得到 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;
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;