我在SQL Server中有一个包含大量表的数据库,并希望以csv格式导出所有表。从前面提到的一个非常类似的问题 - Export from SQL Server 2012 to .CSV through Management Studio
右键单击management studio中的数据库,然后选择任务 - > 导出数据......
按照向导,在目标部分选择“平面文件” 目的地'。输入您的文件名并选择您的选项。
我想要的是一次导出所有表的能力。 SQL Server导入和导出向导一次只允许一个表。如果你有一个非常大的数据库,这非常麻烦。我认为更简单的解决方案可能涉及编写查询,但不确定。
答案 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格式。