使用 csvsql 生成插入或删除 SQL 脚本可能没有直接的解决方案;至少当我迫切需要它时,我自己找不到。然而,--query
通过允许我们自己准备这样的陈述,我们可以选择这个选项。当然,它需要一点点努力,但它的回报非常好。
这是一个例子。我有一个 csv 文件(称为 test2.csv)。这就是我能够为 csv 文件中的所有行生成插入语句的方式。
csvsql --query "SELECT 'insert into test2 values (''' ||
trim(ifnull(my_table.survived, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.RECORD_TYPE, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.BASE_HIN, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.SUFFIX, 'null123')) ||''',''' ||
trim(ifnull(my_table.name, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.ADDRESS_1, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.ADDRESS_2, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.CITY, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.STATE, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.PRIMARY_ZIP, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.COUNTRY, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.TELEPHONE, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.CLASS_OF_TRADE, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.DEA, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.DATE_HIN_ASSIGNED, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.DATE_LAST_EDITED, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.STATUS, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.VERIFIED, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.LAST_ACTION_CODE, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.REASON_CODE, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.REFERBACK_CODE, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.SUBSET, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.UPIN, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.SPECIALTY, 'null123')) ||''' ,''' ||
trim(ifnull(my_table.FAX, 'null123')) ||''' )'FROM test2 as my_table WHERE survived='0'" test2.csv > insert.sql
确保这是一行,因为 csvsql 不喜欢虚线。
此外,一旦insert.sql
准备好,您需要删除标题行,删除双引号(从所有行中)并查找并替换= 'null123'
为is null
.