gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:39:19 25 4
gpt4 key购买 nike

我在做什么。

我有一个删除行的过程。

我得到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com