如何将SQL中的数据附加到现有文件

时间:2011-01-20 13:20:20

标签: mysql sql file-io append into-outfile

SQL可以选择使用INTO OUTFILE选项将数据转储到文件中,例如

SELECT * from FIshReport INTO OUTFILE './FishyFile'

问题是,只有当文件之前不存在时才允许此命令。它创建文件然后输入数据。 那么,有没有办法以这种方式将数据附加到文件中?

4 个答案:

答案 0 :(得分:4)

由于SELECT语法的MySQL页面建议:

http://dev.mysql.com/doc/refman/5.0/en/select.html

替代方法是从MySQL客户端发出SELECT:

However, if the MySQL client software is installed on the remote machine,
you can instead use a client command such as mysql -e "SELECT ..." > file_name 
to generate the file on the client host. 

,在您的情况下,将被修改为:

mysql -e "SELECT * from FishReport" >> file_name

以便您只需附加到该文件。

从您的Tcl脚本中,您只需将其作为exec命令发出:

http://www.tcl.tk/man/tcl/tutorial/Tcl26.html

答案 1 :(得分:1)

我认为MySQL出于安全原因不允许将数据附加到现有文件或覆盖现有文件。 解决方法可能是将resuts保存在单独的文件中,然后附加使用文件IO。

答案 2 :(得分:0)

您始终可以使用>>

将SQL脚本的输出附加到文件中

例如(对于Sybase):

isql < script.sql >> outputfile.out

我不能告诉你MySQL的等价物是什么,但原则应该是一样的。

当然输出都将转到一个文件,所以如果你的SQL脚本输出各种SQL选择到不同的输出文件,那么你需要拆分脚本。

答案 3 :(得分:0)

您可以将其添加到变量中。然后使用SELECT with UNION。

declare t varchar(100);

set @myvar = concat('
    select *  INTO OUTFILE \'',file,'\'
    from (
       select \'',t,'\'
       union all
       SELECT col from tbl where x      
    ) a' 
);
PREPARE stmt1 FROM @myvar;
EXECUTE stmt1;
Deallocate prepare stmt1;