Sybase - 使用“output to”文件名中的日期创建文件名

时间:2011-06-22 12:50:37

标签: sqlanywhere

尝试对输出文件名进行日期戳记 - 但不断出现错误 - 按照以下方式:

Select * from Orders
output to 'c:'+ select (CONVERT(varchar(10), GETDATE(), 120)) + 'orders.csv'

任何帮助表示赞赏...

2 个答案:

答案 0 :(得分:3)

我在Sybase 9上有类似的问题 - 我必须在名为该过程的spearate文件中编写每个过程/函数体。所以我不得不使用每个过程(或函数)的名称动态创建文件名。下面是我的解决方案(适用于isql):

begin
    declare folder varchar (40);
    declare fileName varchar(60);
    -- folder parameter is our destination path - the 4 backslashes are important here
    set folder = 'c:\\\\test\\\\sql\\\\';
    -- here we are iterating over all procedures / functions
    for p as curs dynamic scroll cursor for 
        Select distinct sysobjects.name
            from sysobjects inner join syscomments
            on sysobjects.id = syscomments.id where sysobjects.type = 'P'
    do
        -- each procedure must be inside separate file named like that procedure
        set fileName =  folder + name + '.sql';
        -- finally, there are answer to original question:
        -- we are exporting data into file, whose name is defined dynamically
        unload select proc_defn from SYS.SYSPROCEDURE where proc_name = name 
            to fileName escapes off;
    end for;
end

答案 1 :(得分:2)

output to是一个dbisql命令,因此它在客户端上进行了解释。这意味着您不能使用表达式作为文件名,因为它们是在服务器上执行的。但是,您可以使用unload select语句(在服务器上运行)和into client file子句来执行您想要的操作。

请参阅unload select声明here上的文档。

免责声明:我在SQL Anywhere工程中为Sybase工作。