試圖使用日期戳記輸出文件名 - 但不斷收到錯誤 - 線沿線的:的Sybase - 在創建日期的文件名「輸出到」文件名
Select * from Orders
output to 'c:'+ select (CONVERT(varchar(10), GETDATE(), 120)) + 'orders.csv'
讚賞任何幫助...
試圖使用日期戳記輸出文件名 - 但不斷收到錯誤 - 線沿線的:的Sybase - 在創建日期的文件名「輸出到」文件名
Select * from Orders
output to 'c:'+ select (CONVERT(varchar(10), GETDATE(), 120)) + 'orders.csv'
讚賞任何幫助...
output to
是一個dbisql命令,因此它在客戶端上被解釋。這意味着你不能使用表達式作爲文件名,因爲它們是在服務器上執行的。但是,您可以使用into client file
子句中的unload select
語句(它在服務器上運行)來執行您想要的操作。
請參閱unload select
聲明的文檔here。
聲明:我在SQL Anywhere工程中爲Sybase工作。
我在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
這是真棒,你包括代碼在你的答案,但你介意分享更多的細節*這段代碼在做什麼*和*爲什麼*這解決了這個問題? – CullenJ
感謝您的回覆。我剛剛更新了我的答案,對問題進行了一些簡要說明,並對每個步驟進行了一些評論 –
你會得到什麼錯誤? – oliholz
語法錯誤:'+'不是預期的 – Gator
IAnywhere - 11 ---想要的輸出文件名像2011-06-22orders.csv – Gator