2016-12-02 23 views
0

我有一個場景,我需要將select語句的結果傳遞給批處理腳本,然後使用這些值生成另一個文件。如何讀取select語句的輸出並將其分配給循環中的批處理文件中的各個參數

SQL查詢:

Select SrcName, TrgName from dbo.t_src_trg_ref where Loadstatus='Assinged' 

O/P此查詢是這樣的:

SrcName | TrgName 
src1 | trg1 
src2 | trg2 
src3 | trg3 

等等

批處理腳本應該閱讀的輸出,併爲每一個文本文件排成一個循環,文件的內容應該是這樣的:

file1.txt 
$$src=src1 
$$trg=trg1 

file2.txt 
$$src=src2 
$$trg=trg2 

file3.txt 
$$src=src3 
$$trg=trg3 

依此類推。

在這方面的任何幫助,我是批量腳本新手,發現很難爲此開發批處理腳本。

在此先感謝。

+0

爲什麼你不能在SQL中創建文件? –

+0

不具有對SQL Server中擴展存儲過程的執行權限。這就是爲什麼要在批處理腳本中做到這一點:( – Anurag

回答

0

您可以創建一個SQL cursor則遊標循環碼,使用和xp_cmdshell過程SQL BCP命令中,您可以create text files從定製數據

SQL Server數據庫。例如,下面的使用光標的代碼,你可以創建文本文件在它的採樣數據

DECLARE @sql VARCHAR(1000) 

DECLARE @name sysname 

DECLARE mycursor CURSOR FAST_FORWARD FOR SELECT name FROM sys.tables 
OPEN mycursor 
FETCH NEXT FROM mycursor INTO @name 

WHILE @@FETCH_STATUS = 0 
BEGIN 

SET @sql = 'bcp "select ''' + replace(@name,'''','''''') + '''" queryout "c:\temp\' + @name + '.txt" -c -UTF8 -T -Slocalhost"' 
EXEC master..xp_cmdshell @sql 

FETCH NEXT FROM mycursor INTO @name 
END 

CLOSE mycursor 
DEALLOCATE mycursor 

創建的文件被視爲如下

enter image description here

+0

感謝您的幫助..但沒有執行權限在xp_cmdshell。將盡力獲得所需的權限。雖然是否有任何其他的工作? – Anurag

相關問題