SQL Server Management Studio 2012 - 将所有数据库表导出为csv

时间:2015-06-11 21:08:51

标签: sql sql-server ssms

我在SQL Server中有一个包含大量表的数据库,并希望以csv格式导出所有表。从前面提到的一个非常类似的问题 - Export from SQL Server 2012 to .CSV through Management Studio

  

右键单击management studio中的数据库,然后选择任务 - >   导出数据......

     

按照向导,在目标部分选择“平面文件”   目的地'。输入您的文件名并选择您的选项。

我想要的是一次导出所有表的能力。 SQL Server导入和导出向导一次只允许一个表。如果你有一个非常大的数据库,这非常麻烦。我认为更简单的解决方案可能涉及编写查询,但不确定。

5 个答案:

答案 0 :(得分:48)

导出向导一次只允许一个。我使用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
}

由于

答案 1 :(得分:5)

选择Export Data,而不是点击Generate Scripts。选择所需的表格,单击“下一步”,然后单击Advanced按钮。 General下的最后一个选项是Types of data to script。选择Schema and data或仅Data

答案 2 :(得分:3)

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"

答案 3 :(得分:1)

对@ 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"

答案 4 :(得分:0)

第一路

您可以将架构复制到临时数据库,然后使用该数据库导出所有表(以及列名称)。

步骤:

1)首先,为所有表创建一个脚本:
任务 - >生成脚本 - >所有表 - >单个sql文件

2)创建一个虚拟数据库并运行该脚本。

3)右键单击虚拟数据库并选择tasks-> export data->选择源数据 - >选择目标作为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格式。