Mysql加载数据时CONCAT错误

标签 mysql sql variables concatenation

我正在开发一个 SQL 脚本,用于将存储在 S3 存储桶中的 .csv 文件加载到 RDS 数据库中。当不使用 CONCAT 时,LOAD 命令可以正常工作。我使用 CONCAT 在语句中包含变量。我认为问题出在一个或多个条款上。为了进行故障排除,我显着缩短了这些字段。我尝试了几种不同的方法,但似乎无法获得正确的语法。

set @s3intotemp = CONCAT('
LOAD DATA FROM S3 PREFIX "`',@workingdir, '`"
INTO TABLE `',@rndtable, '` 
FIELDS TERMINATED BY ","
ESCAPED BY ""
ENCLOSED BY "\""
LINES TERMINATED BY "\n"
(@col1,
@col2) 
SET customer=@col1,
firstname=@col2;
');
PREPARE stmt from @s3intotemp;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

我收到以下错误:

SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '" (@col1, @col2 ) SET customer=@col1, firstname=@col2' at line 6

最佳答案

您需要转义字符串中的反斜杠,以便它们将其纳入连接结果中。

set @s3intotemp = CONCAT('
LOAD DATA FROM S3 PREFIX "`',@workingdir, '`"
INTO TABLE `',@rndtable, '` 
FIELDS TERMINATED BY ","
ESCAPED BY ""
ENCLOSED BY "\\\""
LINES TERMINATED BY "\\n"
(@col1,
@col2) 
SET customer=@col1,
firstname=@col2;
');

关于Mysql加载数据时CONCAT错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51445947/

相关文章:

java - JOOQ 中的提交钩子(Hook)

sql - 如何在Apache Spark中执行SQL查询

javascript - promise 中的变量

php - 是否可以在 Android 应用程序中处理来自 PHP 文件的 session

sql - 使用Where 子句从多值列表中选择

c - C 中值的范围

java - 当我向索引变量添加数字时,为什么它没有增加?

c# - MySQL 中的多个同时 SELECT 语句

php - mySQL - FIND_IN_SET() 找不到该值

java - 如何将数据库中的问题存储在 servlet 上并显示在 html 页面上?测验申请