Showing posts with label Stored Procedure. Show all posts
Showing posts with label Stored Procedure. Show all posts

Thursday, May 9, 2019

สร้างและใช้งาน Stored Procedure ใน Microsoft SQL Server Management Studio

  • เดิมใช้วิธีดึงข้อมูลจากฐานข้อมูลมาหลาย ๆ ครั้ง แล้วค่อยเขียนโปรแกรม Vb.Net จัดการข้อมูลอีกทีนึง ทำให้สิ้นเปลืองเวลา ในการแก้ไข Code และได้มองหาวิธีที่จะมาช่วยแก้ปัญหานี้
  • พบวิธีสร้างและใช้งาน Stored Procedure ศึกษาหาข้อมูลผ่าน Net
  • ลองสร้างและใช้งาน Stored Procedure แล้วทำให้รู้ว่า
    • ได้ใช้ความสามารถของ MS SQL Server ได้อย่างมีประสิทธิภาพมากกว่าเดิมที่เคยใช้
    • ไม่จำเป็นต้องดึงข้อมูลจากฐานข้อมูลมาหลาย ๆ เพราะสามารถดึงข้อมูลครั้งเดียวแล้วได้ข้อมูลครบตามที่ต้องการใช้งาน
    • ลดเวลาในการเขียน/แก้ไข Code โปรแกรม ใน Application
  • เริ่มสร้าง Stored Procedure จากง่าย ๆ ก่อนดังนี้
    •  เมื่อเข้าสู่ Microsoft SQL Server Management Studio แล้วคลิกเลือก Database ที่ต้องการ  > คลิก เลือก Programmability > คลิกเลือก Stored Procedures > คลิกขวาเลือก New Stored Procedure...
    • ลบข้อความหลัง CREATE PROCEDURE ออก แล้วตั้งชื่อ Stored Procedure ที่ต้องการจะสร้างขึ้นมาใหม่ (อาจตั้งชื่อขึ้นต้นด้วยตัวอักษร sp แล้วตามด้วยชื่อ เช่น spYourProcedureName)
    • ลบข้อความที่ขึ้นต้นด้วย <@Param ทั้ง 2 บรรทัดออก แล้วใส่ชื่อ พารามิเตอร์ซึ่งต้องขึ้นต้นด้วยเครื่องหมาย @ และ ระบุชนิดของข้อมูล ถ้ามี พารามิเตอร์มากกว่า 1 ตัว ให้ คั่นด้วย เครื่องหมาย คอมม่า
    • ลบบรรทัดที่อยู่ระหว่าง BEGIN และ END ออก แล้วใส่ Query Command ต่าง ๆ ตามที่ต้องการ
    • คลิกปุ่ม Execute เพื่อบันทึก Stored Procedure ที่สร้างขึ้นมาใหม่
  • ตัวอย่าง Stored Procedure
USE [Energy]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE spEnergyGen6
 @MeterDateTime datetime
 AS
BEGIN
 SET LANGUAGE US_ENGLISH
 DECLARE @D1 DateTime ;
 DECLARE @D2 DateTime ;
 DECLARE @intHour Integer ;
 
  SET @D1 = DATEADD(HH,0,@MeterDateTime)
  SET @D2 = DATEADD(HH,1,@MeterDateTime)
  SET @intHour = DATEPART(HH,@MeterDateTime)

 SELECT TagDateTime 
       ,G4G6NETim
       ,G4G6NETex
 FROM EnergyGen6
 WHERE TagDateTime IN ( SELECT MIN(TagDateTime)
                        FROM EnergyGen6
                        WHERE TagDatetime between @D1 and @D2
                        GROUP BY CONVERT(VARCHAR(8), TagDateTime, 112), DATEPART(HOUR,TagDateTime)
                        HAVING DATEPART(HH,TagDateTime) = @intHour
                       )
END
  • ตัวอย่าง การเรียกใช้งาน Stored Procedure
  • Exec spEnergyGen6 @MeterDateTime = '2019-05-03 00:00:00'
    

    Wednesday, September 21, 2016

    การเขียน Stored Procedure บน SQL Server


    แหล่งข้อมูล http://www.thaicreate.com/tutorial/sqlserver-stored-procedure-create.html

     
    ตอนที่ 1 : รู้จักและการเขียน Stored Procedure บน SQL Server (SQL Server : Stored Procedure) ในบทความของไทยครีเอทผมอาจจะไม่ค่อยได้พูดถึง Stored Procedure ซะเท่าไหร่ เพราะในการเขียนโปรแกรมทั่ว ๆ ไป ที่ไม่ต้องการความซับซ้อนมากนัก การเขียน SQL Query ปกติก็สามารถทำงานได้ และในการเขียนโปรแกรมรุ่นใหม่ ๆ ไม่ว่าจะเป็น PHP หรือ .Net Application หรืออื่น ๆ ก็มี Framework ใหม่ ๆ ที่ออกมาช่วยจัดการ ORM(Oreited Relational Mapping) ช่วยการเขียนติดต่อกับ Database นั้นง่ายมาก ยิ่งทำให้การเขียน Stored Procedure นั้นอาจจะไม่ค่อยมีความจำเป็นซะเท่าไหร่ และโดยเฉพาะใน .Net Application ที่ได้รับความนิยมมากในปัจุบัน ยังมี Framework ที่จัดการกับ Database อย่างเช่น LINQ to SQL , LINQ to Entities หรือ Entity Framework Model ที่สนับสนุนการเขียน Coding ทำการ Select, Insert, Update, Delete ในรูปแบบของ Syntax ภาษานั้น ๆ บนโปรแกรมได้เลย โดยไม่ต้องสนใจที่จะเขียน SQL และยังมีประโยชน์เมื่อต้องการเปลี่ยนประเภทของ Database เช่น MySQL, Oracle ก็ไม่ต้องมานั้งทำการแก้ไขหรือเขียน Stored Procedure ใหม่

    การเขียน Stored Procedure จะจำเป็นมากในการพัฒนาระบบขนาดใหญ่ ที่มีการจัดเก็บข้อมูลและประมวลผลจำนวนมาก ๆ เพราะการเขียน Query ในปกติ ที่มีการติดต่อกับข้อมูลหลาย ๆ ครั้ง เราจะต้อง Select แล้วใช้โปรแกรมอ่านค่า เมื่ออ่านได้ค่าแล้วค่อยส่งไปประมวลผลที่ Database ซ้ำ ๆ ซึ่งจะเป็นการทำงานซ้ำซ้อน มีการรับส่งระหว่าง Application กับ Database เป็นสิบหรือหลายร้อยครั้ง ซึ่งผลที่ตามมาคือ Performance ของโปรแกรมจะทำงานช้ามาก ทางเลือกในการแก้ปํยหานี้ก็คือ เราใช้การทำงานซ้ำซ้อนทั้งหมดนี้ที่ Database แทน โดยเราเพียงส่งค่า Parameters ที่จำเป็นต้องใช้ จากนั้นบน Database ก็จะนำค่า Parameters ที่ส่งไปนั้น ทำงานตามคำสั่งต่าง ๆ บน Stored Procedure ที่ เราเขียนขึ้น เมื่อได้ค่าที่ต้องการค่อยส่งค่า Result กลับมายังโปรแกรม วิธีนี้จะเป็นการเพิ่มประสิทธิภาพการทำงานของโปรแกรมให้ทำงานเร็วขึ้น และลด Traffic ระหว่าง Database กับ Application ได้สูงมาก

    ข้อดีการใช้ Stored Procedure

    • Syntax เขียนง่าย เข้าใจง่าย และในปัจจุบันมี Tools ที่ช่วยให้การ Debug ง่ายมาก
    • เพิ่มประสิทธิภาพการทำงานการ Query Database ได้อย่างดีเยี่ยม ลดภาระการทำงานของ Application
    • ลด Traffic ของ Network หรือระหว่าง Database กับ Application
    • การพัฒนาค่อนข้างจะเป็นระบบ แยกระหว่าง Application Logic กับ Database Logic ได้ชัดเจน เช่น ถ้าต้องการแก้ไข Logic ของ Database อาจจะเพียงแก้ไขที่ Stored Procedure เท่านั้น
    ข้อเสียการใช้ Stored Procedure
    • การเขียน Stored จะผูกกกับ Database นั้น ๆ เมื่อเปลี่ยน Database ไปใช้ตัวอื่น จะต้องเขียน Stored ใหม่ทั้งหมด
    • Syntax ของการเขียน Stored Procedure จะไม่เหมือนกัน
    • เมื่อนำไปใช้บน Production Server การ Debug ตรวจสอบหาข้อผิดพลาดทำได้ยากพอสมควร
    ตอนที่ 2 : การสร้าง Parameters รับค่าบน Stored Procedure (SQL Server : Stored Procedure) 
    ตอนที่ 3: การ Print และแสดงผลบน Stored Procedure (SQL Server : Stored Procedure) 
    ตอนที่ 4 : การสร้างตัวแปร Declare Variable บน Stored Procedure (SQL Server : Stored Procedure
    ตอนที่ 5 : การสร้าง Declare Table สร้างตัวแปรแบบตาราง (SQL Server : Stored Procedure) 
    ตอนที่ 6 : การสร้าง Loop ข้อมูลบน Stored Procedure (SQL Server : Stored Procedure) 
    ตอนที่ 7 : การใช้ Cursor บน Stored Procedure (SQL Server : Stored Procedure) 
    ตอนที่ 8 : การใช้ If ....Else If...Else สร้างเงื่อนไข (SQL Server : Stored Procedure) 
    ตอนที่ 9 : การใช้ Try Catch บน Stored Procedure (SQL Server : Stored Procedure) 
    ตอนที่ 10 : การใช้ OUTPUT และ OUT เพื่อส่งค่ากลับ (SQL Server : Stored Procedure) 
    ตอนที่ 11 : การใช้ Transaction เพื่อ Rollback และ Commit (SQL Server : Stored Procedure) 
    ตอนที่ 12 : การใช้ Cursor ระหว่าง (Between) Stored Procedure (SQL Server : Stored Procedure) 
    ตอนที่ 13 : การ Debug Stored Procedure บน Visual Studio 2010,2012,2013,2015 และอื่น ๆ 
    ตอนที่ 14 : การสร้าง View Table บน SQL Server Database (SQL Server : View Table) 
    ตอนที่ 15 : การสร้าง Trigger บน SQL Server Database (SQL Server : Trigger) 
    ตอนที่ 16 : การสร้าง Function บน Server Database (SQL Server : Function) 
    ตอนที่ 17 : PHP เรียกใช้ EXEC/CALL - SQL Server Stored Procedure ด้วย sqlsrv และ pdo 
    ตอนที่ 18 : Visual Basic (VB.Net) เรียกใช้ EXEC SQL Server Stored Procedure 
    ตอนที่ 19 : Java เรียกใช้ EXEC/CALL - SQL Server Stored Procedure ด้วย (JDBC) 
    ตอนที่ 20 : Visual C# (C# .Net) เรียกใช้ EXEC/CALL - SQL Server Stored Procedure