Jak wyeksportować wynik zapytania do pliku .csv w programie SQL Server 2008?
Jak wyeksportować wynik zapytania do pliku .csv w programie SQL Server 2008?
Odpowiedzi:
Poniżej znajduje się pełnoekranowa wersja tego obrazu
Spowoduje to wyświetlenie wyników zapytania w postaci tekstu rozdzielanego przecinkami.
Aby zapisać wyniki zapytania do pliku: Ctrl + Shift + F
Ctrl+Shift+F
, zmienia tylko tryb wyjścia, nie ma wpływu na wyniki, jeśli już wykonałeś zapytanie. Aby zostało to odzwierciedlone, musisz ponownie uruchomić zapytanie. Po uruchomieniu go w trybie „Wyniki do pliku” powinien wyświetlić monit o określenie, gdzie chcesz zapisać wyniki.
Wiem, że to trochę stare, ale tutaj jest znacznie łatwiejszy sposób ...
Uruchom zapytanie z ustawieniami domyślnymi (umieszcza wyniki w formacie siatki, jeśli twój nie jest w formacie siatki, patrz poniżej)
Kliknij prawym przyciskiem myszy wyniki siatki, kliknij „Zapisz wyniki jako” i zapisz.
Jeśli wyniki nie są w formacie siatki, kliknij prawym przyciskiem myszy w miejscu wpisywania zapytania, najedź kursorem na „Wyniki do” i kliknij „Wyniki do siatki”
Pamiętaj, że NIE przechwytujesz nagłówków kolumn!
Powodzenia!
Możesz użyć programu PowerShell
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
i Add-PSSnapin SqlServerProviderSnapin100
.
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(ale nie musiałem korzystać z tych poleceń cmdlet). Również ja zapisane polecenia w skrypcie, co nie byłoby aż bym zmienił politykę wykonanie: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
.
RemoteSigned
wystarczy polityka wykonania.
Jeśli dana baza danych jest lokalna, prawdopodobnie najpewniejszy sposób wyeksportowania wyniku zapytania do pliku CSV (to znaczy zapewniający największą kontrolę) jest prawdopodobnie najbardziej niezawodnym sposobem .
Po wyczerpującym przejściu przez ten proces uznałem, że najlepszą opcją jest następująca opcja
Skrypt programu PowerShell
$dbname = "**YOUR_DB_NAME_WITHOUT_STARS**"
$AttachmentPath = "c:\\export.csv"
$QueryFmt= @"
**YOUR_QUERY_WITHOUT_STARS**
"@
Invoke-Sqlcmd -ServerInstance **SERVER_NAME_WITHOUT_STARS** -Database $dbname -Query $QueryFmt | Export-CSV $AttachmentPath -NoTypeInformation
Uruchom PowerShell jako administrator
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Opierając się na odpowiedzi NS, mam skrypt PowerShell, który eksportuje do pliku CSV z cudzysłowami wokół pola i oddzielonymi przecinkami i pomija informacje nagłówka w pliku.
add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100
$qry = @"
Select
*
From
tablename
"@
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $qry | convertto-CSV -notype | select -skip 1 > "full path and filename.csv"
Pierwsze dwa wiersze umożliwiają użycie polecenia let-polecenia Invoke-SqlCmd .
Użyj T-SQL :
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
Ale jest kilka zastrzeżeń:
Musisz mieć dostępnego dostawcę Microsoft.ACE.OLEDB.12.0. Dostawca Jet 4.0 też będzie działał, ale jest stary, więc zamiast tego użyłem tego.
Plik CSV będzie musiał już istnieć. Jeśli używasz nagłówków ( HDR=YES
), upewnij się, że pierwsza linia pliku .CSV to rozdzielana lista wszystkich pól.
Używanie natywnej techniki SQL Server Management Studio do eksportowania do CSV (zgodnie z sugestią @ 8kb) nie działa, jeśli wartości zawierają przecinki, ponieważ SSMS nie zawija wartości w podwójne cudzysłowy. Bardziej niezawodnym sposobem, który zadziałał w moim przypadku, jest po prostu skopiowanie wyników (kliknij wewnątrz siatki, a następnie CTRL-A, CTRL-C) i wklejenie ich do programu Excel. Następnie zapisz jako plik CSV z programu Excel.
Możesz użyć QueryToDoc ( http://www.querytodoc.com ). Pozwala napisać zapytanie w bazie danych SQL i wyeksportować wyniki - po wybraniu separatora - do programu Excel, Word, HTML lub CSV
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
jako @Slogmeister Extraordinaire Quoted jest poprawne.
Trzeba mieć 1> Plik już obecny z kolumnami 2> Trzeba mieć zainstalowany Office
Napotkano błędy
Msg 7303, poziom 16, stan 1, wiersz 1 Nie można zainicjować obiektu źródła danych dostawcy OLE DB „Microsoft.ACE.OLEDB.12.0” dla serwera połączonego „(null)”.
Msg 15281, poziom 16, stan 1, wiersz 1 SQL Server zablokował dostęp do STATEMENT „OpenRowset / OpenDatasource” składnika „Ad Hoc Distributed Queries”, ponieważ ten składnik jest wyłączony w ramach konfiguracji zabezpieczeń tego serwera. Administrator systemu może włączyć korzystanie z „kwerend rozproszonych ad hoc” przy użyciu sp_configure. Aby uzyskać więcej informacji na temat włączania „Zapytań rozproszonych ad hoc”, wyszukaj hasło „Zapytania rozproszone ad hoc” w SQL Server Books Online.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
Jeśli nie chcesz używać Powershell, ta odpowiedź jest odmianą świetnej odpowiedzi 8kb. Jedyna różnica polega na tym, że zamiast wybierać CSV jako format wyjściowy, wybierz opcję Rozdzielany tabulatorami. W ten sposób, jeśli w danych są przecinki, nie pominie komórek w programie Excel. Ponadto, jeśli masz domyślny separator programu Excel ustawiony na karty, możesz po prostu skopiować wszystkie wyniki zapytania SSMS (CTRL-A, CTRL-C) i wkleić do programu Excel (nie ma potrzeby zapisywania jako pliku i importowania do programu Excel ):
Teraz możesz wykonać zapytanie, a następnie wykonać CTRL-A, aby zaznaczyć wszystkie wyniki, następnie CTRL-C, aby skopiować do schowka, a następnie przełączyć się na Excel 2013 (może działać również w 2007 roku, nie jestem pewien) i wkleić - zakładając domyślne ustawienie Excela separator jest ustawiony na tabulator.
Tak, wszystko to jest możliwe, gdy masz bezpośredni dostęp do serwerów. Ale co, jeśli masz dostęp do serwera tylko z serwera WWW / aplikacji? Cóż, sytuacja była taka z nami dawno temu, a rozwiązaniem był eksport SQL Server do CSV .