Edited at

SQL Serverのテーブルのデータをダブルクオート(")を付けてCSVにエクスポートする方法

More than 1 year has passed since last update.

SQL ServerのデータをCSVエクスポートする方法はいくつかありますが、

「カンマ(,)」や「改行」が含まれるテキストがある場合、ダブルクオートで括る方法が

見当たらなかったので、PowerShellを利用してエクスポートしました。

SQL Server Management Studioではオプションで「カンマ(,)」を含むデータを「ダブルクオート(")」で括るオプションはありますが、改行には対応していません。

データベース名を右クリックして、[タスク]-[データのエクスポート]をし、SSISを使用する方法もありますが、マッピング編集が面倒であったり、環境依存文字を含むデータの文字コード変換に失敗したり、うまくいかないことがあります。

Windows PowerShell ISEを開いて次のコードを貼り付けて実行すると、C:\temp以下にファイルがエクスポートされます。変数は適宜修正してください。

$sqlsvr = 'データベースサーバー名'
$dir = 'c:\temp\' #エクスポートディレクトリ
$database = 'データベース名'
$diagnostics = 1
$sqlserver = New-Object Microsoft.SqlServer.Management.Smo.Server($sqlsvr)
$db = $sqlserver.databases[$database]
$TableName = "テーブル名"
$Header = 1

$Delimiter = ',' # ifs_ExportTables.Delimiter
if ($diagnostics = 1)
{write-host -ForegroundColor Green "Creating Table $TableName to path $dir$TableName.csv" }
$sqlserverR = New-Object Microsoft.SqlServer.Management.Smo.Server($sqlsvr)
$dbR = $sqlserverR.databases[$database]
$TablesR = $dbR.ExecuteWithResults("Select * FROM $TableName")

$result = $TablesR[0].tables.item(0)
if ($Header -eq '1')
{$result |export-csv -Delimiter $Delimiter –notype -path $dir$TableName.csv -Encoding Default}
else
{$result | ConvertTo-Csv -NoTypeInformation -Delimiter $Delimiter | Select-Object -Skip 1 | Out-File -FilePath $dir$TableName.csv -Encoding Default}