SQL Serverに多くのテーブルがあるデータベースがあり、すべてのテーブルをcsv形式でエクスポートしたい。以前に尋ねられた非常によく似た質問から- Management Studioを介してSQL Server 2012から.CSVにエクスポート
Management Studioでデータベースを右クリックし、[タスク]-> [データのエクスポート...]を選択します。
ウィザードに従い、宛先部分で「フラットファイル宛先」を選択します。ファイル名を入力し、オプションを選択します。
私が欲しいのは、すべてのテーブルを一度にエクスポートする機能です。 SQL ServerのインポートとエクスポートWizardは一度に1つのテーブルのみを許可します。非常に大きなデータベースがある場合、これは非常に面倒です。承知しました。
エクスポートウィザードでは、一度に1つしか使用できません。 powershellスクリプトを使用して、すべてのテーブルをcsvにエクスポートしました。それがあなたを助けるならば、これを試してください。
$server = "SERVERNAME\INSTANCE"
$database = "DATABASE_NAME"
$tablequery = "SELECT name from sys.tables"
#Delcare Connection Variables
$connectionTemplate = "Data Source={0};Integrated Security=SSPI;Initial Catalog={1};"
$connectionString = [string]::Format($connectionTemplate, $server, $database)
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$command = New-Object System.Data.SqlClient.SqlCommand
$command.CommandText = $tablequery
$command.Connection = $connection
#Load up the Tables in a dataset
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $command
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$connection.Close()
# Loop through all tables and export a CSV of the Table Data
foreach ($Row in $DataSet.Tables[0].Rows)
{
$queryData = "SELECT * FROM [$($Row[0])]"
#Specify the output location of your dump file
$extractFile = "C:\mssql\export\$($Row[0]).csv"
$command.CommandText = $queryData
$command.Connection = $connection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $command
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$connection.Close()
$DataSet.Tables[0] | Export-Csv $extractFile -NoTypeInformation
}
ありがとう
Export Data
をクリックする代わりに、Generate Scripts
を選択します。必要なテーブルを選択し、[次へ]をクリックして[Advanced
]ボタンをクリックします。 General
の下の最後のオプションはTypes of data to script
です。 Schema and data
またはData
のみを選択します。
スリーによる答えは素晴らしいです。私のデータベースでは、複数のスキーマがあるため、これを変更しました:
$tablequery = "SELECT schemas.name as schemaName, tables.name as tableName from sys.tables inner join sys.schemas ON tables.schema_id = schemas.schema_id"
そしてまた
$queryData = "SELECT * FROM [$($Row[0])].[$($Row[1])]"
#Specify the output location of your dump file
$extractFile = "C:\mssql\export\$($Row[0])_$($Row[1]).csv"
@ annem-srinivasソリューションに関するコメント:デフォルト(dbo)以外のスキーマを使用する場合は、彼のスクリプトで以下を変更します。
$tablequery = "SELECT schemas.name as schemaName, tables.name AS tableName from sys.tables INNER JOIN sys.schemas ON schemas.schema_id
= tables.schema_id ORDER BY schemas.name, tables.name"
そして
$queryData = "SELECT * FROM [$($Row[0])].[$($Row[1])]"
$extractFile = "C:\temp\export\$($Row[0]).$($Row[1]).csv"
スキーマを一時データベースに複製し、そのデータベースを使用してすべてのテーブルを(列名とともに)エクスポートできます。
手順:
1)最初に、すべてのテーブルのスクリプトを作成します。
タスク->スクリプトの生成->すべてのテーブル->単一のSQLファイル
2)ダミーデータベースを作成し、このスクリプトを実行します。
3)ダミーデータベースを右クリックして、[タスク]-> [データのエクスポート]-> [ソースデータの選択]-> [Microsoft Excelとして宛先を選択]を選択し、パスを指定します-> [実行]
すべてのテーブルとその列を含む単一のスプレッドシートを取得します。
以下のクエリを実行すると、1列目のすべてのテーブル名と、結果の2列目の対応する列名が表示されます。
select t.name ,c.name from sys.columns c
inner join sys.tables t
on t.object_id = c.object_id
order by t.name
この結果をコピーして、CSVに貼り付けます。