web-dev-qa-db-fra.com

SQL Server Management Studio 2012 - Exporter toutes les tables de la base de données au format csv

J'ai une base de données dans SQL Server avec beaucoup de tables et souhaite exporter toutes les tables au format csv. À partir d'une question très similaire posée précédemment - Exportation de SQL Server 2012 vers .CSV via Management Studio

Faites un clic droit sur votre base de données dans le studio de gestion et choisissez Tâches -> Exporter les données ...

Suivez un assistant et dans la partie destination, choisissez "Destination du fichier plat". Tapez votre nom de fichier et choisissez vos options.

Ce que je veux, c'est la possibilité d'exporter toutes les tables à la fois. L'importation et l'exportation SQL Server Wizard n'autorise qu'une seule table à la fois. C'est assez lourd, si vous avez une très grande base de données. Je pense qu'une solution plus simple pourrait impliquer l'écriture d'une requête, mais pas sûr.

20
Ashwini Khare

L'assistant d'exportation n'en autorise qu'une à la fois. J'ai utilisé le script powershell pour exporter toutes mes tables en csv. Veuillez essayer ceci si cela vous aide.

$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
}

Merci

52
sree

Au lieu de cliquer sur Export Data, choisissez Generate Scripts. Sélectionnez les tables souhaitées, cliquez sur Suivant et cliquez sur le bouton Advanced. La dernière option sous General est Types of data to script. Choisissez Schema and data ou simplement Data.

5
JamieD77

La réponse de sree est excellente. Pour ma base de données, car il existe plusieurs schémas, j'ai changé cela:

$tablequery = "SELECT schemas.name as schemaName, tables.name as tableName from sys.tables inner join sys.schemas ON tables.schema_id = schemas.schema_id"

et puis aussi

$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

Commentaire sur la solution @ annem-srinivas: Si vous utilisez des schémas autres que la valeur par défaut (dbo), changez ce qui suit dans son script:

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

et

$queryData = "SELECT * FROM [$($Row[0])].[$($Row[1])]"
$extractFile = "C:\temp\export\$($Row[0]).$($Row[1]).csv"
1
w5ar

1ère voie

Vous pouvez répliquer le schéma dans une base de données temporaire, puis utiliser cette base de données pour exporter toutes les tables (ainsi que les noms de colonne).

Étapes:

1) Créez d'abord un script pour toutes les tables:
Tâches-> Générer des scripts-> toutes les tables-> fichier sql unique

2) Créez une base de données factice et exécutez ce script.

3) faites un clic droit sur la base de données factice et sélectionnez les tâches-> exporter les données-> sélectionner les données source-> sélectionner la destination en tant que Microsoft Excel et donner son chemin-> Exécuter

Vous obtiendrez une feuille de calcul unique avec tous les tableaux et ses colonnes.

2ème voie

Exécutez la requête ci-dessous, elle donnera tous les noms de table dans la 1ère colonne ainsi que les noms de colonne correspondants dans la 2ème colonne du résultat.

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

Copiez ce résultat et collez-le dans CSV.

0
JerryGoyal