Home Solution(ถาม-ตอบ) ระบบรายงานอย่างง่าย: ตั้งScheduleเพื่อExportข้อมูลจากMS SQLออกมาเป็นtext file

EDA International ตัวแทนจำหน่ายเป็นทางการ ICONICS, PRElectronics, M-System, Graphon, ABB

ซอร์ฟแวร์ตรวจสอบ/บริหารงานอุตสาหกรรม วิศวกรรม SCADA/HMI (ICONICS GENESIS32/64), Report Solution, Cloud, อุปกรณ์วัดคุม แสดงผล เทอร์มินัล อุปกรณ์ป้องกันทางอิเล็คทรอนิกส์ 

ระบบรายงานอย่างง่าย: ตั้งScheduleเพื่อExportข้อมูลจากMS SQLออกมาเป็นtext file

Exportข้อมูลจากMS SQLออกมาเป็นText Fileตามเวลาโดยอัตโนมัติเพื่อวัตถุประสงค์เช่นเป็นรายงาน

 

วิธีการนี้มีหลักการคือสั่งให้MS SQL Serverส่งออกข้อมูลช่วงที่เราต้องการออกมาเป็นไฟล์Text โดยใช้Task ScheduleของWindowsเป็นตัวตั้งเวลาสั่งการ ทำให้เราไม่ต้องใช้โปรแกรมพิเศษหรือเขียนโปรแกรมใด ๆ ก็สามารถตั้งเวลาให้รายงานออกมาอัตโนมัติได้

 

ก่อนอื่นEnableฟังก์ชั่นของshell commandในMS sQL Serverเสียก่อน โดยเปิด MS SQL Management Studio ขึ้นมาแล้วรันQuery(กดปุ่มF5เพื่อExecute)ดังนี้

Use Master
GO

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO

image

สร้างไฟล์sqlเพื่อเก็บคำสั่งExportข้อมูลเป็นtext file

สร้างไฟล์sqlแล้วนำCommandดังตัวอย่างวางในไฟล์ดังกล่าว (ทดสอบCommandในMS SQL Management Studioก่อนก็ได้ครับแล้วSaveเป็นไฟล์sql เช่น exptxt.sql)

ตัวอย่างด้านล่างเป็นการเอาข้อมูล1000ข้อมูลล่าสุดจากตารางA1ในดาต้าเบสชื่อtest และServerชื่อ(local)\SQLEXPRESS2 ออกมาใส่ในไฟล์ชื่อmytestตามชื่อไฟล์ด้วยวันที่เวลาก่อนต่อด้วยนามสกุล.txt

declare @sql varchar(8000)
declare @filename varchar(50)

SET @filename = 'c:\mytest' + replace(replace(convert(varchar(20), getdate()),' ','_'),':','-') + '.txt'

SELECT @sql = 'bcp "select top 1000 * from test.dbo.A1 order by date_time desc" queryout ' + @filename + ' -c -t -T -S (local)\SQLEXPRESS2'

exec xp_cmdshell @sql

ส่วนสำคัญของCommand

SET @filename = 'c:\mytest' + replace(replace(convert(varchar(20), getdate()),' ','_'),':','-') + '.txt'

จะเป็นการกำหนดที่เก็บไฟล์และชื่อไฟล์ โดยเปลี่ยนช่องว่างในวันที่เวลาที่เป็นส่วนหนึ่งของชื่อไฟล์เป็น “_” และเปลี่ยน “:” เป็น “-“

select top 1000 * from test.dbo.A1 order by date_time desc

คือการเอาข้อมูลล่าสุด1000แถวออกมา

สร้างTask Schedule

หลังจากสร้างไฟล์sqlแล้ว ให้สร้างTaskในWindows Task Scheduler

ดำเนินการตามวิซาร์ดและกำหนดระยะเวลาเช่น Monthly จนถึงขั้นตอนเลือกActionที่จะให้Taskทำงานให้เลือก “Start a program”

image

 

ตั้งเวลาที่จะให้ทำงานโดยคลิ้กNew

 

image

 

สร้างActionขึ้นมาโดยให้ไปรันโปรแกรม SQLCMD.EXE ซึ่งอยูในพาธโปรแกรม MS SQL Server เช่น "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" (คลิ้กปุ่ม New เพื่อสร้างAction)

 

image

 

ในช่องAdd arguments (optional): ให้ใส่optionคือ

 

-S ServerName -E -i "พาธไฟล์sql"

 

เมื่อServerName คือชื่อ Server เช่น (local)\SQLEXPRESS2 ดังนั้นในตัวอย่างนี้ก็จะได้optionเช่น (เมื่อไฟล์exptxt.sqlเก็บในC:\)

-S (local)\sqlexpress2 -E -i "C:\exptxt.sql"

 

image

คลิ้ก OK

ทดสอบรัน

image

ผลลัพธ์จะได้ไฟล์txt

image

 

ข้อมูลภายใน

image

 

เท่านี้ก็ได้ระบบรายงานอย่างง่ายแล้วครับ

 

สิ่งที่น่าสนใจ

Wednesday, 18 February 2015 14:02

3000Folderen 110PxThe compact temperature devices of the PR 3000 series provide high accuracy, fast response time AND low temperature drift – without compromise.