SQL Server 2008でクエリ結果を.csvファイルにエクスポートするにはどうすればよいですか?
SQL Server 2008でクエリ結果を.csvファイルにエクスポートするにはどうすればよいですか?
回答:
これにより、クエリ結果がカンマ区切りのテキストとして表示されます。
クエリの結果をファイルに保存するには:Ctrl + Shift + F
Ctrl+Shift+F
と、出力モードが変更されるだけで、すでにクエリを実行している場合は結果に影響しません。これを反映させるには、クエリを再実行する必要があります。「結果をファイルに保存」モードで実行すると、結果を保存する場所を指定するよう求められます。
私はこれが少し古いことを知っていますが、これははるかに簡単な方法です...
デフォルト設定でクエリを実行します(グリッド形式で結果を出力します。グリッド形式でない場合は、以下を参照してください)
グリッドの結果を右クリックし、[名前を付けて結果を保存]をクリックして保存します。
結果がグリッド形式でない場合は、クエリを書き込む場所を右クリックし、[Results To]にカーソルを合わせて[Results To Grid]をクリックします
列ヘッダーはキャプチャしないでください。
幸運を!
PowerShellを使用できます
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
ありましたAdd-PSSnapin SqlServerProviderSnapin100
。
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
必要がありました(ただし、これらのコマンドレットをスナップインする必要はありませんでした)。また、コマンドをスクリプトに保存したため、実行ポリシーを変更するまで実行されませんでしたSet-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
。
RemoteSigned
実行ポリシーで十分だと思います。
問題のデータベースがローカルである場合、おそらくクエリ結果をCSVファイルにエクスポートする最も強力な方法は次のとおりです(つまり、ほとんどの制御が可能です)。
このプロセスを徹底的に検討した後、私は以下が最良の選択肢であることがわかりました
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
管理者としてPowerShellを実行する
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
NSの答えに基づいて、フィールドを引用符で囲み、コンマで区切ってCSVファイルにエクスポートするPowerShellスクリプトを作成し、ファイルのヘッダー情報をスキップします。
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"
最初の2行は、Invoke-SqlCmdコマンドレットを使用する機能を有効にします。
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
ただし、いくつかの注意点があります。
Microsoft.ACE.OLEDB.12.0プロバイダーを使用可能にする必要があります。Jet 4.0プロバイダーも機能しますが、それは古いものなので、代わりにこれを使用しました。
.CSVファイルは既に存在している必要があります。ヘッダー(HDR=YES
)を使用している場合は、.CSVファイルの最初の行がすべてのフィールドの区切りリストであることを確認してください。
QueryToDoc(http://www.querytodoc.com)を使用できます。SQLデータベースに対するクエリを記述し、区切り文字を選択した後、Excel、Word、HTML、または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
@Slogmeister Extraordinaire Quotedが正しいので。
1>ファイルがすでに列に存在している必要がある2> Officeがインストールされている必要がある
直面したエラー
メッセージ7303、レベル16、状態1、行1リンクサーバー "(null)"のOLE DBプロバイダー "Microsoft.ACE.OLEDB.12.0"のデータソースオブジェクトを初期化できません。 "
メッセージ15281、レベル16、状態1、行1 SQL Serverは、コンポーネント 'アドホック分散クエリ'のステートメント 'OpenRowset / OpenDatasource'へのアクセスをブロックしました。このコンポーネントがこのサーバーのセキュリティ構成の一部としてオフになっているためです。システム管理者は、sp_configureを使用して「アドホック分散クエリ」の使用を有効にすることができます。「アドホック分散クエリ」の有効化の詳細については、SQL Server Books Onlineで「アドホック分散クエリ」を検索してください。
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
Powershellを使用したくない場合、この答えは8kbのすばらしい答えのバリエーションです。唯一の違いは、出力形式としてCSVを選択する代わりに、タブ区切りを選択することです。この方法では、データにカンマがある場合、Excelのセルはスキップされません。また、Excelのデフォルトの区切り文字がタブに設定されている場合は、SSMSクエリの結果(CTRL-A、CTRL-C)をすべてコピーしてExcelに貼り付けることができます(ファイルとして保存してExcelにインポートする必要はありません) ):
これでクエリを実行し、CTRL-Aを実行してすべての結果を選択し、CTRL-Cを使用してクリップボードにコピーし、Excel 2013に切り替えて(2007でも機能する可能性があります)、貼り付けます-Excelのデフォルトを想定区切り文字はタブに設定されています。
はい、サーバーに直接アクセスできる場合、これらすべてが可能です。しかし、Webサーバーまたはアプリケーションサーバーからサーバーにのみアクセスできる場合はどうでしょうか。ええと、状況は私たちとの長い間の関係であり、解決策はSQL Server Export to CSVでした。