首页 > 解决方案 > MySQL New Column at SELECT 添加,但值没有增加,存储过程

问题描述

这是一个很长的选择,所以我不会显示整个代码,但问题就在这里:

SET @idcounter=0;
SET @SQL = CONCAT('
CREATE TABLE temp_',CONCAT(InvNum),CONCAT('(
SELECT
    '),CONCAT(@idcounter:=@idcounter+1),CONCAT(' as ID,
/* Show Output columns */
/*

它不是 1、2、3 等值,而是到处都给出 1。所以我尝试了另一种解决方案。

SET @SQL = CONCAT('SET ',CONCAT(@idcounter=0),CONCAT(';
CREATE TABLE temp_',CONCAT(InvNum),CONCAT('(
SELECT
    '),CONCAT(@idcounter:=@idcounter+1),CONCAT(' as ID,
/* Show Output columns */
/*

但这会产生错误:错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行 0.015 秒的“NULL”附近使用正确的语法

老实说,我不知道如何处理这个问题。我错过了什么?

“InvNum”是一个工作参数,这不是问题。

标签: mysqlstored-procedures

解决方案


该问题是由于使用

CONCAT('(SELECT '), CONCAT(@idcounter:=@idcounter+1)

这会导致SELECT语句在执行时插入@idcounter变量值,而不是您希望的每SELECT行。

其中设置@SQL为:

CREATE TABLE temp_123 
SELECT 1 as ID

您只需要删除多余的CONCAT()调用。

SET @idcounter=0;
SET @SQL=CONCAT('
CREATE TABLE temp_',InvNum, '
SELECT @idcounter:=@idcounter+1 as ID')

其中设置@SQL为:

CREATE TABLE temp_123 
SELECT @idcounter:=@idcounter+1 as ID

推荐阅读