#SQL #batch Auto export CSV with SQL Command Line

ความขี้เกียจเป็นบ่อเกิดของนวัตกรรม วันนี้เลยตั้ง schedule เพื่อ backup ข้อมูลออกมาเป็นไฟล์ excel หรือ csv โดยใช้กระบวนการเดียวกับ บันทึกการทำ Auto Backup ด้วย batch แจ้งผ่าน Line Notify API โดยใช้ code สำหรับการ export ดังนี้

sqlcmd -S . -d AzureDemo50 -E -s, -W -Q "SELECT * FROM dbo04.ExcelTest" > ExcelTest.csv
-S .
The option defines the localhost server. Use .\SQLEXPRESS for a named SQL Express instance.
-d AzureDemo50
The option defines the database AzureDemo50.
-E
The option defines the trusted connection. You may use user credentials instead: -U Username -P Password
-s,
The option defines the comma as a column separator. Use -s; for semicolon.
-W
The option removes trailing spaces.
-Q "SELECT * FROM dbo04.ExcelTest"
The option defines a command line query and exit.
> ExcelTest.csv
The command redirects the data to the output file.

ที่มา: https://www.excel-sql-server.com/sql-server-export-to-excel-using-bcp-sqlcmd-csv.htm#

ตัวอย่างที่ใช้งาน

sqlcmd -S {SERVERNAME}.{INSTANCE} -U "{USER}" -P "{PASSWORD}" -d {DATABASENAME} -W "-s," -Q "SELECT * FROM {VIEW}" > {FILENAME}.csv

-S {SERVERNAME}
ชื่อเครื่องหากใช้งานในเครื่องเดียวกัน จะไม่ใส่ก็ได้ เพราะระบบจะเข้าหาจาก localhost และเรียกผ่าน .\SQLEXPRESS โดยอัตโนมัติ และหากใช้งานเพื่อเชื่อมต่อไปยัง server อื่น ให้ใส่ชื่อของ server เข้าไปด้วย เช่น -S DBDRSITE

-U “{USER}” -P “{PASSWORD}”
ชื่อ Username และ Password สำหรับการเชื่อมต่อกับ Server ข้างต้น เช่น -U "admin" -P "123456"

-d {DATABASENAME}
ชื่อฐานข้อมูล เช่น hospital_profile

-W
ลบช่องว่างที่ต่อท้าย

“-s,”
ให้เติม comma , เข้าไประหว่าง column

-Q “SELECT * FROM {VIEW}” > {PATH\FILENAME}.csv
query ที่ใช้เพื่อดึงข้อมูล ในที่นี้จะเรียกผ่าน view ที่สร้างไว้ เช่น [dbo].[v_ac_activityfull] และส่งไปเก็บตาม directory ที่ระบุไว้

กันลืม

หากใช้กับ localhost สามารถใช้ -E เพื่อใช้ trusted connection แทนการใส่ -U และ -P (ในที่นี้หมายถึง ใช้ Windows Authentication )