sql server - SQL extract data to Excel using Powershell -


i want extract data sql server new excel file using powershell . small data set code works tables has more 100.000 rows , take ages. reason why don't use utility in sql server because want extract mutilple tables. there way optimize script export big tables excel? or there way this?

i'm using following script

## ---------- working sql server ---------- ##  ## - sql server table data: $sqlserver = 'server'; $database = 'database'; $sqlquery = @'   select top 10 *   database.dbo.table   '@;  ## - connect sql server using non-smo class 'system.data': $sqlconnection = new-object system.data.sqlclient.sqlconnection; $sqlconnection.connectionstring = ` "server = $sqlserver; database = $database; integrated security = true";  $sqlcmd = new-object system.data.sqlclient.sqlcommand; $sqlcmd.commandtext = $sqlquery; $sqlcmd.connection = $sqlconnection;  ## - extract , build sql data object '$datasettable': $sqladapter = new-object system.data.sqlclient.sqldataadapter; $sqladapter.selectcommand = $sqlcmd; $dataset = new-object system.data.dataset; $sqladapter.fill($dataset); $datasettable = $dataset.tables["table"];   ## ---------- working excel ---------- ##  ## - create excel application instance: $xlsobj = new-object -comobject excel.application;  ## - create new workbook , sheet (visible = 1 / 0 not visible) $xlsobj.visible = 0; $xlswb = $xlsobj.workbooks.add(); $xlssh = $xlswb.worksheets.item(1);  ## - build excel column heading: [array] $getcolumnnames = $datasettable.columns | select columnname;  ## - build column header: [int] $rowheader = 1; foreach ($colh in $getcolumnnames) { $xlssh.cells.item(1, $rowheader).font.bold = $true; $xlssh.cells.item(1, $rowheader) = $colh.columnname; $rowheader++; };  ## - adding data start in row 2 column 1: [int] $rowdata = 2; [int] $coldata = 1;  foreach ($rec in $datasettable.rows) { foreach ($coln in $getcolumnnames) { ## - next line convert cell text only: $xlssh.cells.numberformat = "@";  ## - populating columns: $xlssh.cells.item($rowdata, $coldata) = ` $rec.$($coln.columnname).tostring(); $coldata++; }; $rowdata++; $coldata = 1; };  ## - adjusting columns in excel sheet: $xlsrng = $xlssh.usedrange; $xlsrng.entirecolumn.autofit();  ## ---------- saving file , terminating excel application ---------- ##  ## - saving excel file - if file exist delete save $xlsfile = ` "c:\path\file.xls";  if (test-path $xlsfile) { remove-item $xlsfile $xlsobj.activeworkbook.saveas($xlsfile); } else { $xlsobj.activeworkbook.saveas($xlsfile); };  ## quit excel , terminate excel application process: $xlsobj.quit(); (get-process excel*) | foreach ($_) { $_.kill() };  ## - end of script - ## 

there's simple magic make lot easier, , that's copy/paste. can convert datatable tab delimited csv, copy clipboard, , paste excel. i'll ignore sql part, since seem have in hand.

## ---------- working excel ---------- ##  ## - create excel application instance: $xlsobj = new-object -comobject excel.application;  ## - create new workbook , sheet (visible = 1 / 0 not visible) $xlsobj.visible = 0; $xlswb = $xlsobj.workbooks.add(); $xlssh = $xlswb.worksheets.item(1);  ## - copy entire table clipboard tab delimited csv $datasettable | convertto-csv -notype -del "`t" | clip  ## - paste table excel $xlsobj.activecell.pastespecial() | out-null  ## - set columns auto-fit width $xlsobj.activesheet.usedrange.columns|%{$_.autofit()|out-null} 

Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -