2015-10-19 65 views
1

我在做什么。MySQL ROW_COUNT()在Prepare语句中不起作用

我有一个程序,我删除行。

我越来越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; 

我已经试过alread。

// 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

文本必须代表一个单独的语句,而不是多个语句。

我也试过

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 

我没能得到怎样可以行删除了。

回答

4

你需要EXECUTE之后和之前DEALLOCATE...

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; 
+0

非常感谢执行SELECT ROW_COUNT() :)它为我工作。 –