7

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

SELECT * from FIshReport INTO OUTFILE './FishyFile'

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

4

4 回答 4

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

于 2011-01-20T13:32:45.647 回答
1

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

于 2011-01-20T13:35:18.657 回答
0

您始终可以使用将 SQL 脚本的输出附加到文件中>>

例如(对于 Sybase):

isql < script.sql >> outputfile.out

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

当然,输出将全部转到一个文件,因此如果您的 SQL 脚本将各种 SQL 选择输出到不同的输出文件,那么您需要拆分脚本。

于 2011-01-20T13:25:05.347 回答
0

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

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;
于 2012-01-12T10:13:33.450 回答