簡體   English   中英

SQL Server Management Studio 2012 - 將數據庫的所有表導出為 csv

[英]SQL Server Management Studio 2012 - Export all tables of database as csv

我在 SQL 服務器中有一個數據庫,里面有很多表,希望以 csv 格式導出所有表。 來自之前提出的一個非常相似的問題 - Export from SQL Server 2012 to.CSV through Management Studio

在 Management Studio 中右鍵單擊您的數據庫,然后選擇任務 -> 導出數據...

按照向導操作,在目標部分選擇“平面文件目標”。 鍵入您的文件名並選擇您的選項。

我想要的是一次導出所有表的能力。 SQL 服務器導入和導出向導一次只允許一個表。 如果您有一個非常大的數據庫,這將非常麻煩。 我認為更簡單的解決方案可能涉及編寫查詢,但不確定。

導出向導一次只允許一個。 我使用 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
}

謝謝

不要單擊“ Export Data ,而是選擇“ Generate Scripts 選擇您想要的表,單擊下一步並單擊Advanced按鈕。 General下的最后一個選項是Types of data to script 選擇Schema and data或只是Data

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"

評論@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"

第一種方式

您可以將架構復制到臨時數據庫,然后使用該數據庫導出所有表(以及列名)。

腳步:

1)首先,為所有表創建一個腳本:
任務->生成腳本->所有表->單個sql文件

2) 創建一個虛擬數據庫並運行此腳本。

3) 右鍵單擊​​虛擬數據庫並選擇任務->導出數據->選擇源數據->選擇目標為Microsoft Excel並給出其路徑->執行

您將獲得一個包含所有表格及其列的電子表格。

第二種方式

執行下面的查詢,它將給出第一列中的所有表名以及結果的第二列中相應的列名。

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 中。

簡單的一行解決方案:

打開 Microsoft SQL Server Management studio (SSMS),連接到您的數據庫並運行以下命令:

SELECT 'sqlcmd -s, -W -Q "set nocount on; select * from ['+DB_NAME()+'].[dbo].[' + st.NAME + ']" | findstr /v /c:"-" /b > "c:\target\' +st.NAME +'.csv'  
FROM sys.tables st

創建文件夾 c:\target 並在該文件夾和 select 中打開一個 cmd 控制台並復制上面 SQL 的所有結果並將它們粘貼到 cmd window

就是這樣,所有 csv 文件都將在那里創建。

將生成 csv 個文件,每個文件的第一行作為列名

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM