mysql - 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”是一个工作参数,这不是问题。
解决方案
该问题是由于使用
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
推荐阅读
- php - PHP API 的网关错误问题
- excel - 为什么 Pandas 不读取 xlsx 文件?
- php - 如何包含 PHP 并传入查询,以便它在 URL 中没有查询字符串的情况下呈现
- docker - 如何进行名称解析。使用 docker compose 和 docker network 时发生 net::ERR_NAME_NOT_RESOLVED 错误
- hibernate - failOverReadOnly 在 mysql-connector-java-5.1.6 中不起作用
- python - 使用索引作为哈希函数生成随机参数组合的有效方法
- python - Visual Studio Code 数据查看器问题
- excel - 在 Excel VBA 中合并两个相同的模块
- r - 使用 pdf 查看器 (UiOutput) 和 selectableTableOutput (shinyjqui 包) 在 Shiny 中出现临时内存错误
- javascript - 如何根据字段值显示自定义输出