web-dev-qa-db-ja.com

SQL Server Management Studio 2012-データベースのすべてのテーブルをcsvとしてエクスポート

SQL Serverに多くのテーブルがあるデータベースがあり、すべてのテーブルをcsv形式でエクスポートしたい。以前に尋ねられた非常によく似た質問から- Management Studioを介してSQL Server 2012から.CSVにエクスポート

Management Studioでデータベースを右クリックし、[タスク]-> [データのエクスポート...]を選択します。

ウィザードに従い、宛先部分で「フラットファイル宛先」を選択します。ファイル名を入力し、オプションを選択します。

私が欲しいのは、すべてのテーブルを一度にエクスポートする機能です。 SQL ServerのインポートとエクスポートWizardは一度に1つのテーブルのみを許可します。非常に大きなデータベースがある場合、これは非常に面倒です。承知しました。

20
Ashwini Khare

エクスポートウィザードでは、一度に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
}

ありがとう

52
sree

Export Dataをクリックする代わりに、Generate Scriptsを選択します。必要なテーブルを選択し、[次へ]をクリックして[Advanced]ボタンをクリックします。 Generalの下の最後のオプションはTypes of data to scriptです。 Schema and dataまたはDataのみを選択します。

5
JamieD77

スリーによる答えは素晴らしいです。私のデータベースでは、複数のスキーマがあるため、これを変更しました:

$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"
4
NP3

@ 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
w5ar

第一の方法

スキーマを一時データベースに複製し、そのデータベースを使用してすべてのテーブルを(列名とともに)エクスポートできます。

手順:

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に貼り付けます。

0
JerryGoyal