2015-11-26 54 views
0

我想知道是否有人可以提供幫助。SQL - 將結果自動轉換爲CSV或文本文件

我在SQL中有大量的查詢(全部在單獨的* .sql文件中)。我想知道是否有辦法自動運行這些查詢或批量運行它們以將其保存到csv或txt文件中?

另外,我在這些查詢中發現了變量,這些查詢需要在查詢運行之前每週進行修改。

謝謝。

KJ

能否請您提供有關變量的一些額外的幫助?以前我會聲明並設置變量爲:

DECLARE @TW_FROM DATETIME

DECLARE @TW_TO DATETIME

SET @TW_FROM = '2015年11月16日00:00:00'; SET @TW_TO ='2015-11-22 23:00:00';

如何使用sqlcmd執行此操作?

+0

從SQL代理作業運行的SQL Server Integration Services將執行此操作。 –

+0

嗨Kajan,我只是看看你的個人資料。你已經提出了3個問題,但沒有接受任何問題。請在這裏查看一下:[someone-answers](http://stackoverflow.com/help/someone-answers)。問題是,沒有被接受的問題永遠存在。 Thx – Shnugo

回答

1

是的,你可以使用sqlcmd來做到這一點。

首先 - 變量。您可以使用$(variablename)將.sql文件中的變量引用到要替換變量的位置。例如,

use $(dbname); 
select $(columnname) from table1 where column= '$(var1)' 

然後您使用以下命令(注意參數-v變量)

sqlcmd -S servername -d database -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred" 

調用SQLCMD爲了其輸出到一個文件,你標記> FILENAME.TXT上結束

sqlcmd -S servername -d database -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred" > filename.txt 

如果要輸出到CSV,你也可以指定使用參數-s(注意與服務器大寫的S的idfference)的分隔符。所以現在我們有

sqlcmd -S servername -d database -s "," -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred" > filename.csv 

如果要輸出多個命令到相同的CSV或TXT文件,使用>>而不是>,因爲它添加到該文件的底部德,而不是取代它。

sqlcmd -S servername -d database -s "," -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred" >> filename.csv 

要爲幾個腳本運行它,你可以把一個批處理文件語句,然後每個星期換一次的變量。

+0

這是完美的@BeanFrog !!!非常感謝。 – Kajan

0

你可以寫一個使用SQLCMD一個批處理文件:

MSDN sqlcmd

這將允許您調用一個循環,並輸出結果到文件腳本文件。

0

將您當前的腳本轉換爲Stored Procedure。 然後,您可以將您的變量傳遞給該變量並運行查詢。

如果您有SQL Server代理可用(SQL標準或更好),則可以使用它來自動運行存儲過程。

否則,使用Windows中的任務計劃程序也可以實現相同的功能。

至於導出爲CSV this將是有用的。

0

這取決於你的SQL Server在哪裏運行。寫任何東西到你想要的位置可能是相當棘手的。

你可以閱讀關於BCP。

我的建議是:

創建UDF(最好是內聯UDF!)從您的查詢的數據庫內。請從EXCEL或任何其他配件產品撥打電話。您可能想要設置一個Excel,其中每張工作表上自動填充所有查詢