SQL Server Management Studio 2012-экспорт всех таблиц базы данных в формате csv

У меня есть база данных в SQL Server с большим количеством таблиц и хочу экспортировать все таблицы в формате csv. Из очень похожего вопроса, заданного ранее -экспорт из SQL Server 2012 в .CSV через Management Studio

щелкните правой кнопкой мыши на базе данных в management studio и выберите задачи - > экспортировать данные...

следуйте указаниям Мастера и в целевой части выберите " плоский файл Назначения'. Введите имя файла и выберите опции.

то, что я хочу, это возможность экспортировать все таблицы сразу. Мастер импорта и экспорта SQL Server разрешает только одну таблицу за раз. Это довольно громоздко, если у вас очень большая база данных. Я думаю, что более простое решение может включать в себя написание запроса, но не уверен.

5 ответов


мастер экспорта разрешает только по одному за раз. Я использовал сценарий 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. Выберите нужные таблицы, нажмите кнопку Далее и нажмите кнопку . Последний вариант в разделе General is Types of data to script. Выбрал Schema and data или просто Data.


комментарий к решению @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"

ответ sree велик. Для моей БД, потому что есть несколько схем, я изменил это:

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

1-й способ

вы можете реплицировать схему в временную базу данных, а затем использовать эту базу данных для экспорта всех таблиц (вместе с именами столбцов).

действия:

1) сначала создайте скрипт для всех таблиц:
Задачи - > создание скриптов - >все таблицы - >один файл sql

2) Создайте фиктивную базу данных и запустите этот скрипт.

3) щелкните правой кнопкой мыши на фиктивной базе данных и выберите задачи- > экспорт данных - > выберите источник данные - > выберите пункт назначения как Microsoft Excel и укажите его путь - >выполнить

вы получите одну электронную таблицу со всеми таблицами и ее столбцами.

2-й способ

выполнить ниже запрос, он даст все имена таблиц в 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.