LoginSignup
1
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-06-12

SQL ServerのデータをCSVエクスポートする方法はいくつかありますが、
「カンマ(,)」や「改行」が含まれるテキストがある場合、ダブルクオートで括る方法が
見当たらなかったので、PowerShellを利用してエクスポートしました。

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

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

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


[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$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}
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2