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