2 Stimmen

Exportieren des gespeicherten Prozedurergebnisses nach Excel mit Spaltennamen

Ich habe den Code für das Speichern des Ausgabewerts des gespeicherten Verfahrens in einem Excel-Blatt angehängt.

aber ich habe ein paar Probleme, sie sind

(1) alle Spalten werden in der ersten Spalte des Excel-Blatts angezeigt.. was ich nicht brauche, ich möchte den Bericht in verschiedenen Spalten anzeigen.. wie mache ich das..

(2) wenn ich einen inneren Join mit dem Haupt verwende, wie kann ich die Spaltennamen der anderen Tabelle erhalten?

Kann mir bitte jemand helfen, die oben genannten Probleme zu lösen?

alter procedure proc_generate_excel_with_columns
(
  @db_name varchar(100),
  @schm_name varchar(100),
  @table_name varchar(100), 
  @file_name varchar(100)
)
as

  --Generate column names as a recordset
  declare @columns varchar(8000), @sql varchar(8000), @data_file varchar(100)

  select 
     @columns = coalesce(@columns+',', '') + column_name + ' as ' + column_name 
  from 
     information_schema.columns
  where 
     table_name = @table_name

  select 
     @columns = '''' + replace(replace(@columns, ' as ', ''' as '),',',',''')

  --Create a dummy file to have actual data
  select 
    @data_file = substring(@file_name, 1, len(@file_name) - 
                 charindex('\', reverse(@file_name))) + '\data_file.xls'

  --Generate column names in the passed EXCEL file
  set @sql='bcp " select * from (select ' + @columns + ') as t" queryout   
      c:\test.xls  -c -t,  -T -S ' + @@servername

  exec master..xp_cmdshell @sql

  --Generate data in the dummy file
  set @sql = 'bcp "select * from st..VEN_FULLREPORTMASTER 
                   where entry_date =  convert(varchar, getdate() - 3, 105) " 
              queryout  c:\data_file.xls  -c -t,  -T -S' + @@servername

  -- exec master..xp_cmdshell @sql

  -- Copy dummy file to passed EXCEL file
  set @sql = 'exec master..xp_cmdshell ''type '+@data_file+' >> "'+@file_name+'"'''

  exec(@sql)

  ----Delete dummy file 
  set @sql = 'exec master..xp_cmdshell ''del ' + @data_file + ''''
  exec(@sql)

0 Stimmen

Im ersten Fall habe ich die Lösung gefunden .. wir müssen nur eine Änderung im Ausgabedateiformat vornehmen .. es sollte .csv anstelle von .xls sein.

0 Stimmen

Müssen Sie eine gespeicherte Prozedur verwenden, um die Daten zu exportieren, oder suchen Sie einfach nach einer Möglichkeit, eine Abfrage auszuführen und die Ergebnisse in eine CSV/Excel-Datei (mit Kopfzeilen) zu exportieren?

0 Stimmen

Hallo billinkc, ich habe beide Probleme gelöst..danke

0voto

vvvv4d Punkte 3711

Wenn die Verwendung von SSIS eine Option ist, wäre dies eine triviale Aufgabe, die mit einer Datenflusstask abgeschlossen werden könnte.

Können Sie SSIS verwenden oder benötigen Sie eine reine tSQL-Lösung?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X