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

Ash*_*are 22 sql sql-server ssms

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

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

按照向导,在目标部分中选择"平面文件目标".输入您的文件名并选择您的选项.

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

sre*_*ree 56

导出向导一次只允许一个.我使用powershell脚本将所有表导出到csv中.如果有帮助,请试试这个.

$server = "SERVERNAME\INSTANCE"
$database = "DATABASE_NAME"
$tablequery = "SELECT schemas.name as schemaName, tables.name as tableName from sys.tables inner join sys.schemas ON tables.schema_id = schemas.schema_id"

#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])].[$($Row[1])]"

    #Specify the output location of your dump file
    $extractFile = "C:\mssql\export\$($Row[0])_$($Row[1]).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
}
Run Code Online (Sandbox Code Playgroud)

谢谢

  • 一个非常有用的脚本.但有一点需要注意......它只适用于不太大的桌子.过了一会儿,内存会变得饱和,我猜主要是在最后一行.如果任何人有更多的内存安全版本的脚本,这可能是非常有用的. (3认同)
  • 这次真是万分感谢。SERVERNAME \ INSTANCE遇到了一些麻烦---对我起作用的只是在其中拥有SERVERNAME,然后确保我也创建了文件夹c:\ mssql \ export文件夹。干杯。 (2认同)

Jam*_*D77 5

Export Data选择而不是单击Generate Scripts。选择所需的表,单击下一步,然后单击Advanced按钮。下的最后一个选项GeneralTypes of data to script。选择Schema and data还是选择Data

  • 即使仅在最后一个选项中选择“数据”,导出的文件仍采用Microsoft SQL Server查询文件格式。不是我想要的文本或csv。有什么解决方法吗? (4认同)
  • 此答案与导出到 CSV 无关。 (2认同)

NP3*_*NP3 5

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"
Run Code Online (Sandbox Code Playgroud)

然后

$queryData = "SELECT * FROM [$($Row[0])].[$($Row[1])]"

#Specify the output location of your dump file
$extractFile = "C:\mssql\export\$($Row[0])_$($Row[1]).csv"
Run Code Online (Sandbox Code Playgroud)