2011-06-22 34 views
0

試圖使用日期戳記輸出文件名 - 但不斷收到錯誤 - 線沿線的:的Sybase - 在創建日期的文件名「輸出到」文件名

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

讚賞任何幫助...

+0

你會得到什麼錯誤? – oliholz

+0

語法錯誤:'+'不是預期的 – Gator

+0

IAnywhere - 11 ---想要的輸出文件名像2011-06-22orders.csv – Gator

回答

2

output to是一個dbisql命令,因此它在客戶端上被解釋。這意味着你不能使用表達式作爲文件名,因爲它們是在服務器上執行的。但是,您可以使用into client file子句中的unload select語句(它在服務器上運行)來執行您想要的操作。

請參閱unload select聲明的文檔here

聲明:我在SQL Anywhere工程中爲Sybase工作。

2

我在Sybase 9上遇到了類似的問題 - 我必須在指定該過程的特定文件中編寫每個過程/函數體。所以我必須使用每個過程的名稱(或函數)動態創建文件名。以下是我的解決方案(適用於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

這是真棒,你包括代碼在你的答案,但你介意分享更多的細節*這段代碼在做什麼*和*爲什麼*這解決了這個問題? – CullenJ

+0

感謝您的回覆。我剛剛更新了我的答案,對問題進行了一些簡要說明,並對每個步驟進行了一些評論 –

相關問題