2016-08-08 7 views
1

Ich habe eine gespeicherte Prozedur, um CSV-Ausgabe in einem Pfad zurückgeben, nachdem die Abfrage ausgeführt wird. Aber es funktioniert nur für einen einzelnen csv.Erstellen Sie mehrere csv automatisch aus verschiedenen Select-Anweisungen und speichern Sie in einem bestimmten Pfad

Ich möchte ein Skript mehrere csv zusammen aus mehreren SQL-Anweisungen generieren und in einem Pfad speichern.

Meine Eingabe ist here

--------------------------------------------- 
--- Generating output csv by stored procedure 
--------------------------------------------- 

DECLARE @sql NVARCHAR(MAX) = 'SELECT * from #TMP_Lazyone_All_Final' 
DECLARE @file_path NVARCHAR(4000) = N'D:\a\Lazyone_ComplexProducts_Final.csv' -- Change filename path 
DECLARE @Status INT = 1 

EXECUTE spa_util_GetCsv @DBFetch = @sql,    
       @Header = 1, 
       @PCWrite = @file_path, 
       @HeaderQuote = 0, 
       @Status = @Status OUTPUT  

Antwort

0

Sie eine while-Schleife verwenden können, um zu erreichen, was Sie brauchen:

DECLARE @i int = 0 
DECLARE @t TABLE (
    id int, 
    querys nvarchar(max), 
    filename nvarchar(max) 
) 

DECLARE @sql NVARCHAR(MAX), 
     @file_path NVARCHAR(4000) = N'D:\a\', 
     @Status INT = 1 

INSERT INTO @t VALUES 
(0, 'first query', @file_path+'first'+'.csv'), 
(1, 'second query',@file_path+ 'second'+'.csv') 
--etc 

WHILE @i < (SELECT COUNT(*) FROM @t) 
BEGIN 
    SELECT @sql = querys, 
      @file_path = filename 
    FROM @t 
    WHERE id = @i 


    EXECUTE spa_util_GetCsv @DBFetch = @sql,    
        @Header = 1, 
        @PCWrite = @file_path, 
        @HeaderQuote = 0, 
        @Status = @Status OUTPUT 
    SET @[email protected]+1 
END 
0

Dieses wie unten Shell Script erreicht Verwendung werden kann.

$categories = Invoke-SqlCmd -ServerInstance SERVERINSTANCENAME -Database DATABASENAME -Query "use yourDBName;select categories from yourtable;" 
    foreach($category in $categories){ 
    $categoryName = $category.name 
    $attachmentFilePath = "D:\$categoryName.csv" 
    $QueryFmt = "Select * from yourtable where categories=$categoryName" 
    Invoke-Sqlcmd -ServerInstance SERVERINSTANCENAME -Database DATABASENAME -Query $QueryFmt | Export-CSV $attachmentFilePath 
    }