MySQL: как включить @ в оператор SQL и не интерпретировать его как параметр? [Дубликат]

0

Мне нужно загрузить CSV файл из сетевого местоположения и импортировать его в таблицу MySQL. Самый простой способ - скопировать его в местоположение MySQL и использовать LOAD DATA. Я сделал это вручную, используя эту команду:

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 жаловался, что дата не в правильном формате.

Так как это будет обычным делом, я попытался включить его в хранимую процедуру, которая может быть вызвана моим процессом, но использование LOAD DATA в хранимой процедуре не допускается.

Поэтому я решил, что просто отправлю необработанную команду из моего процесса с помощью 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: параметр "@PostedDate" должен быть определен.

Есть ли способ обойти это? Или мне придётся прибегнуть к чтению в CSV файле и вводу записей отдельно?

  • 0
    Вы должны использовать `вокруг идентификатора вашего столбца
  • 0
    Я попробовал это. И теперь я получаю MySqlException: неизвестный столбец '@PostedDate' в 'списке полей'
Теги:
mysql-connector

1 ответ

1

У вас есть два варианта.

1) отформатируйте дату в.csv перед загрузкой файла.

2) измените эту колонку на varchar. Загрузите файл, а затем используйте STR_TO_DATE, чтобы изменить желаемый формат даты. Затем измените тип столбца на DATE, если он должен быть определен как один. Обычно у меня нет проблем с полями даты как VARCHAR.

Оба варианта лучше, чем вы думали, что вам, возможно, придется сделать в конце

Ещё вопросы

Сообщество Overcoder
Наверх
Меню