У меня есть .csv
файл с 80k записей.Файл имеет около 15 столбцов, но мне нужно только 3 для цели вставки.Сначала я использую метод ColdFusion cfhttp для чтения файла с моего сервера, затем я попытался использовать этот метод для вставки нескольких строк в таблицу базы данных SQL.Вот пример:
<cfsetting requestTimeOut = "36000" />
<cfhttp method="get" url="https://testsite.org/ZipCodes.csv" name="zipData">
<cfquery name="qryZip" datasource="testDB">
INSERT INTO ZipCodes(
z_zip,
z_city,
z_state
)VALUES
<cfloop query="zipData">
(
<cfqueryparam value="#trim(zipData.ZipCode)#" cfsqltype="cf_sql_char" maxlength="5">,
<cfqueryparam value="#trim(zipData.City)#" cfsqltype="cf_sql_varchar" maxlength="50">,
<cfqueryparam value="#trim(zipData.State)#" cfsqltype="cf_sql_char" maxlength="2">
)
</cfloop>
</cfquery>
Код выше просто продолжает загружаться вечно, и я все еще не получил результаты в своей таблице.Затем я попытался сделать это:
<cfloop query="zipData">
<cfquery name="qryZip" datasource="testDB">
INSERT INTO ZipCodes(
z_zip,
z_city,
z_state
)VALUES
(
<cfqueryparam value="#trim(zipData.ZipCode)#" cfsqltype="cf_sql_char" maxlength="5">,
<cfqueryparam value="#trim(zipData.City)#" cfsqltype="cf_sql_varchar" maxlength="50">,
<cfqueryparam value="#trim(zipData.State)#" cfsqltype="cf_sql_char" maxlength="2">
)
</cfquery>
</cfloop>
Этот метод работает, но, на мой взгляд, очень неэффективен, так как я открываю новое соединение с базой данных для каждой записи, вместо этого первое решение должно быть более эффективным.В этом файле 80 тыс. Записей, и процесс должен быть быстрым, но вместо этого мое первое решение занимает вечность.Есть ли что-то, что я делаю не так или есть какие-то другие проблемы с этим методом?Если кто-нибудь знает, как заставить это решение работать или какой-то другой лучший подход, пожалуйста, дайте мне знать.Спасибо.