2010-10-19 89 views

回答

2

可能有兩個「最佳」的方式去這裏,無論是與集成服務,讓您有一個文本文件輸出,或在分批BCP實用程序文件和/或存儲過程。

我用來管理在存儲過程中動態生成BCP OUT命令並將其傳遞到xp_cmdshell以便將其輸出到文件中的進程。在SSIS之前,這是一個遺留的過程,但它爲我們所需要的工作提供了幫助。

您能夠使用SSIS嗎?還是需要批處理?如果您處於批處理方向,我可以提供一些代碼示例。

編輯 - 這裏是腳本示例。

首先,我假設你已經有一個存儲過程與你想要導出的數據,所以我將關注批處理文件。

這裏是一個方便的方式來獲得你正在尋找的日期字符串:

REM Creates a string in the form of YYYYMMDD-hhmm, with no embedded spaces 
SET hh=%time:~0,2% 
IF "%time:~0,1%"==" " SET hh=0%hh:~1,1% 
SET DateString=%date:~10,4%%date:~4,2%%date:~7,2%-%hh%%time:~3,2% 

你會使用這個後來命名文件。

如果你只有一個查詢需要從一個批處理文件調用,您可以使用此:

BCP "exec dbo.MyExportProc" queryout Export_%DateString%.csv -S (local) -T -m0 -t^| 

這將運行dbo.MyExportProc並使用管道創建一個文件Export_YYYYMMDD,hhmm.csv |作爲分隔符。 -T指定NT身份驗證,-m0指定允許的錯誤數量。 -S是要連接的服務器。

與間歇過程,可以參數化這一點,並生成一個列表,並把它在列表中運行,BCP了一整組查詢:

FOR /F "tokens=1-2 delims=~" %%A in (RunList.txt) do (
     BCP "%%A" queryout %DateString%.csv -S (local) -T -m0 -t^| 
) 

從SQL Server中運行它,你會只需要生成命令行的文本,如上面提到的,並執行類似如下:

declare @command varchar(max) 

set @command = 'BCP "exec dbo.MyExportProc" queryout Export_' + CAST(CONVERT(DATETIME, GETDATE(), 101) AS VARCHAR(21)) + '.csv -S (local) -T -m0 -t^|' 

exec xp_cmdshell @command 

你需要確保你有機會運行xp_cmdshell,這是外圍應用配置器中進行管理。

希望這會讓你走上正軌!

+0

非常感謝Vinnie的回覆,請提供一些批處理代碼示例。 – Simhadri 2010-10-22 15:08:52

相關問題