# [Sql Server] 用 bcp 或 sqlcmd 指令匯出資料
[TOC]
## bcp
SQL Server 的 Bulk Copy Program,匯出/匯入資料用的工具
* `queryout` 將結果匯出成文字檔
* `-c` 使用 字元模式(character mode),即輸出為純文字格式
* `-t,` 設定欄位的分隔字元為半形逗號 `,`
* `-S` 要連接的主機
instance_name 預設通常是 SQLEXPRESS 或 MSSQLSERVER
:::warning
注意:除了driver版本錯誤或沒有權限以外,如果主機只有一個 SQL Server 服務,指令加上 instance_name 的話,也會出現一樣的錯誤訊息。(所以不指定 instance_name 就可以了)
```=cmd!
SQLState = 08001, NativeError = 87
Error = [Microsoft][ODBC Driver 17 for SQL Server]SQL Server Network Interfaces: 連接字串無效 [87].
SQLState = 08001, NativeError = 87
Error = [Microsoft][ODBC Driver 17 for SQL Server]建立 SQL Server 的連接時發生網路相關或執行個體特定錯誤。找不到伺服器或是無法存取。檢查執行個體名稱是否正確以及 SQL Server 執行個體是否設定為允許遠端連接。如需詳細資訊,請參閱《SQL Server 線 上叢書》。
SQLState = S1T00, NativeError = 0
Error = [Microsoft][ODBC Driver 17 for SQL Server]登入逾時終止
```
:::
* `-U` 帳號
* `-P` 密碼
下面語法會將查詢結果輸出成 txt 檔,並每行資料以,分隔
```=cmd!
bcp <select語法> queryout <路徑> -c -t, -S <server>\<instance_name> -U <username> -P <password>
```
```=cmd!
bcp "select TOP 10 id,name,score,type from [database_name].[dbo].[table_name]" queryout "C:\my_upload\test_data.txt" -c -t, -S 192.168.128.1\SQLEXPRESS -U myname -P mypassword
```
## sqlcmd