mysql:如何在sql语句中包含@,而不被解释为参数?

bqucvtff  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(284)

这个问题在这里已经有了答案

如何在.net mysqlcommand中使用mysql用户定义变量(1个答案)
两年前关门了。
我需要从网络位置下载一个csv文件并将其导入mysql表。最简单的方法是将其复制到mysql位置并使用load数据。我使用以下命令手动完成:

LOAD DATA INFILE 'Transactions.CSV' 
INTO TABLE tmpImport 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 ROWS 
(AccountDesignator,@PostedDate,SerialNum,Description,Amount,CrDr) 
SET PostedDate = STR_TO_DATE(@PostedDate, '%m/%d/%Y');

我不得不添加@posteddate,因为没有它,mysql抱怨日期格式不正确。
因此,由于这将是一个常规操作,我尝试将其放入一个可由进程调用的存储过程中,但不允许在存储过程中使用加载数据。
所以我想我应该使用mysql net/connector从进程中发送原始命令:

using (MySqlCommand cmd = new MySqlCommand(sql, new MySqlConnection("server=theServer; uid=theUid; pwd=thePwd; database=theDatabase; SslMode=none;")))
        {
            cmd.Connection.Open();
            rows = cmd.ExecuteNonQuery();
            cmd.Connection.Close();
        }

但是当我尝试运行它时,我得到了一个错误:
mysqlexception:必须定义参数'@postedate'。
有什么办法吗?或者我必须读取csv文件并单独插入记录吗?

uelo1irk

uelo1irk1#

你有两个选择。
1) 在加载文件之前格式化.csv中的日期。
2) 将该列更改为varchar。加载文件,然后使用str\u to\u date更改为所需的日期格式。如果必须将列类型定义为一,则将其更改回最新。我通常不会把日期字段作为varchar处理。
这两种选择都比你认为最后必须做的要好

相关问题