# [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