2013-02-13 63 views
1

我有一個sql server的問題。我想在sql server中運行一個命令691次(對於每個VID)。如何在sql server中創建文本文件

但是VID列的值不是Sequential和Ascending。所以我怎麼能運行這個命令。

我的意思是我想爲每個VID運行這個命令,它的值是691,最小值是11,最大值是7668.然後我想保存每個VID的結果在文本文件中。

的命令是:

declare @vid integer 

DECLARE @FileName varchar(8000) 

declare @bcpCommand varchar(8000) 

set @vid = 1 

while (@vid < 692) 

begin 

SET @FileName = 'd:\re'+ CONVERT(char(8),@vid)+'.txt' 



SET @bcpCommand = 'bcp "select ak_from,ak_to,w from [socialdb].[dbo].final where ???? " queryout "'+ @FileName + '" -C -T -c -S SONY-VAIO\SQLEXPRESS1' 

EXEC master..xp_cmdshell @bcpCommand 



set @vid = (@vid + 1) 

end 

我想與SQL Server 2008的第一個記錄是我的表記錄一個做到這一點。

我應該根據vid分類記錄,並且每個具有相同vid的記錄必須在一個seprat txt文件中。

對於保存在文本文件我使用bcp。我沒有問題。我的問題是與SQL服務器中的查詢做到這一點。正如我所說的,第一個記錄保存在表中,其名稱是最終的。 如何爲此編寫查詢?

+0

歡迎StackOverflow上:如果您發佈的代碼,XML或數據樣本,** **請在突出的那些行文本編輯器並點擊編輯器工具欄上的「代碼示例」按鈕(「{}」),以精確地格式化和語法突出顯示它! – 2013-02-13 05:36:24

+0

你的問題到底是什麼?有很多方法可以做到這一點,到目前爲止你已經嘗試過了嗎?你有什麼問題? – Pondlife 2013-02-13 17:10:21

+0

如何爲此編寫查詢? – sahar 2013-02-13 19:49:51

回答

4

爲此寫入查詢需要以某種可查詢格式(例如數據庫中的表)來存儲數據。一旦你有了,你可以很容易地編寫一個查詢,選擇你正在尋找的列(ak_from,ak_to,w),並通過bcp(請參閱:Using bcp utility to export SQL queries to a text filehttp://msdn.microsoft.com/en-us/library/ms162802.aspx)將結果放入文本文件中。

假設您將擁有多於5條記錄和3個VID,您可以在光標內編寫bcp,以便根據您的條件循環並創建多個文本文件。

爲了舉例,下面的代碼只是將5條記錄放入臨時表中,然後輸出三個文本文件中的每一個。

CREATE TABLE ##tbl 
(
    Vid INT NOT NULL 
    ,ak_from INT NOT NULL 
    ,ak_to INT NOT NULL 
    ,w INT NOT NULL 
) 

INSERT INTO ##tbl 
SELECT 11, 164885, 164885, 24 
UNION SELECT 11, 164885, 431072, 3 
UNION SELECT 51, 731754, 690695, 2 
UNION SELECT 51, 204086, 316310, 2 
UNION SELECT 54, 818522, 501263, 1 

DECLARE @vid VARCHAR(2) 
DECLARE @querytextNoVid VARCHAR(100) 
DECLARE @querytext VARCHAR(100) 
DECLARE @filelocation VARCHAR(100) 
DECLARE @cmd VARCHAR(255) 

DECLARE vid_cursor CURSOR FOR SELECT DISTINCT vid FROM ##tbl 
OPEN vid_cursor 
FETCH NEXT FROM vid_cursor INTO @vid 


WHILE @@FETCH_STATUS = 0 
BEGIN 

    SET @querytext = '"SELECT ak_from, ak_to, w FROM ##tbl WHERE vid = ' + @vid + '"' 
    SET @filelocation = '"c:\out_vid' + @vid + '.dat"' 
    SET @cmd = 'bcp ' + @querytext + ' queryout ' + @filelocation + ' -T -c' 
    EXEC master..XP_CMDSHELL @cmd 

    FETCH NEXT FROM vid_cursor INTO @vid 
END 
CLOSE vid_cursor 
DEALLOCATE vid_cursor 

DROP TABLE ##tbl 

你需要確保xp_cmdshell的通過sp_configure的啓用(請參閱:Enable 'xp_cmdshell' SQL Server

相關問題