2017-04-25 27 views
2

我正在研究具有包含用於填充它的SQL查詢的元數據表的專有數據倉庫產品。我需要從元數據表中提取每個查詢並將其保存到自己的.sql文件中,該文件根據其填充的表命名。將T-SQL結果行寫入單個文件

這些查詢中有大約400個,我想將它自動化,但我不知道這樣做的好方法。是否有一種很好的方法可逐行遍歷結果集並將輸出寫入文件?

我想要做的一個例子。比方說,我回到我的結果集的兩行:

select tableName, extractQuery from packages;

的tablename extractQuery

表1 SELECT * FROM sourceTable1;

Table2 select * from sourceTable2;

然後我需要將它保存到兩個不同的文件Table1.sql和Table2.sql中,每個文件都包含返回的SQL命令。

+1

你們是不是該文件夾在SQL Server Management Studio中的SQL中執行所有這些操作,或者可以編寫腳本(cmd或powershell)或C#命令行實用程序或其他東西?你的環境是什麼? – pmbAustin

+2

您可能還想考慮使用SSIS包和腳本組件。 –

回答

0

要擴大@Andrew奧布萊恩SSIS和腳本建議:

第1步:創建一個SSIS包。

第2步:添加一個數據流

第3步:添加您的SQL源

第4步:添加腳本組件

中的SQL組件:

選擇轉型

檢查你的2欄作爲輸入

編輯腳本:粘貼在那裏:

//This is the path to where you want the results stored 
    string filePath = @"\\server\path\"; 
    string fileName = Row.tableName.ToString() + ".sql"; 

    System.IO.File.WriteAllText(Row.extractQuery.ToString(),filePath+fileName); 

這應該寫出每個文件。

0

你可以用BCP命令和光標來做到這一點。

1)確保運行

2之前創建目標文件夾)確保command line utilities are enabled

3)確保SqlService帳戶可以訪問

declare c cursor for 
select tableName from packages 

declare @cvar varchar(64) 

open c 
fetch next from c into @cvar 

while @@FETCH_STATUS = 0 
begin 


DECLARE @OutputFile NVARCHAR(100) , @FilePath NVARCHAR(100) , @bcpCommand NVARCHAR(1000) 

SET @bcpCommand = 'bcp "SELECT extractQuery FROM yourServer.dbo.packages where tableName = '''+ @cvar + '''" queryout ' 
SET @FilePath = 'C:\test\' 
SET @OutputFile = @cvar + '.txt' 
SET @bcpCommand = @bcpCommand + @FilePath + @OutputFile + ' -c -t, -T -S'+ @@servername 
exec master..xp_cmdshell @bcpCommand 

fetch next from c into @cvar 

end 
close c 
deallocate c