从csv文件生成插入SQL语句

Fab*_*mes 53 sql csv firebird insert

我需要将一个csv文件导入Firebird,我花了几个小时尝试一些工具,但没有一个适合我的需求.

主要的问题是我一直在尝试的所有工具,如EMS数据导入Firebird数据向导,我希望我的csv文件包含我的表所需的所有信息.

我需要在insert语句中编写一些自定义SQL,例如,我有一个带有城市名称的cvs文件,但由于我的数据库已经有另一个表中的所有城市(规范化),我需要在插入中编写一个子选择查找城市并写入其ID的语句,我也有一个存储过程来创建GUID.

我的Insert语句是这样的:

INSERT INTO PERSON (ID, NAME, CITY_ID) VALUES((SELECT NEW_GUID FROM CREATE_GUID), :NAME, (SELECT CITY_ID FROM CITY WHERE NAME = :CITY_NAME)
Run Code Online (Sandbox Code Playgroud)

我知道写一个应用程序来做这个很容易,但我不喜欢重新发明轮子,我确信有一些工具可以做到这一点.

你们能给我一些建议吗?

Chr*_*rts 107

这有点粗糙 - 但对于一次性工作,我有时使用Excel.

如果将CSV文件导入Excel,则可以创建一个公式,该公式通过在公式中使用字符串连接来创建INSERT语句.那么 - 如果您的CSV文件有三列出现在Excel中的A,B和C列中,您可以编写一个类似于......的公式

="INSERT INTO MyTable(Col1,Col2,Col3)VALUES("&A1&","&B1&","&C1&")"

然后,您可以将所有行复制到公式中,然后将答案复制并粘贴到文本文件中以针对您的数据库运行.

就像我说的那样 - 它很粗糙 - 但它可以是一种'快速而肮脏'的方式来完成工作!

  • 您也可以使用合适的编辑器(例如vim)打开文件,并在每一行上应用快速宏. (2认同)

Vai*_*hav 8

好吧,如果它是一个CSV,这是一次性过程,在Excel中打开文件,然后编写公式以您想要的任何方式填充数据,然后编写一个简单的Concat公式来构建您的SQL,以及然后为每一行复制该公式.您将获得大量可以在任何地方执行的SQL语句.


Guy*_*Guy 5

法比奥,

我已经完成了Vaibhav多次做过的事情,这是将数据输入数据库的一种很好的"快速而肮脏"的方式.

如果您需要执行此操作几次或某种类型的计划,那么更可靠的方法是将CSV数据"按原样"加载到工作表(即customer_dataload)中,然后使用标准SQL语句填充缺少字段.

(我不知道Firebird的语法 - 但是像......)

UPDATE person
SET id = (SELECT newguid() FROM createguid)

UPDATE person
SET cityid = (SELECT cityid FROM cities WHERE person.cityname = cities.cityname)
Run Code Online (Sandbox Code Playgroud)

等等

通常,将数据输入数据库然后修复数据比在上载期间尝试修复数据要快得多(并且更可靠).您还可以获得交易的好处,如果它不起作用,您可以使用ROLLBACK!


Ter*_*ber 5

我会用awk来做到这一点。

例如,如果您在 CSV 文件中包含以下信息:

Bob,New York
Jane,San Francisco
Steven,Boston
Marie,Los Angeles
Run Code Online (Sandbox Code Playgroud)

以下命令将为您提供您想要的内容,在与 CSV 文件(name-city.csv在本示例中命名)相同的目录中运行。

$ awk -F, '{ print "INSERT INTO PERSON (ID, NAME, CITY_ID) VALUES ((SELECT NEW_GUID FROM CREATE_GUID), '\''"$1"'\'', (SELECT CITY_ID FROM CITY WHERE NAME = '\''"$2"'\''))" }' name-city.csv
Run Code Online (Sandbox Code Playgroud)

键入awk --help以获取更多信息。

  • 这是非常无益的。花几秒钟的时间制作一个快速而肮脏的示例将为那些不知道如何使用 awk 的人节省几个小时。 (4认同)

Ger*_*ied 5

2020 年对我有帮助的两个在线工具:

https://numidian.io/convert/csv/to/sql

https://www.convertcsv.com/csv-to-sql.htm

第二个是基于JS的,不会上传你的数据(至少在我写这篇文章的时候不会)