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'
    

    1 comment:

    1. ถ้าจะเปลี่ยนแปลงแก้ไข Stored Procedure ก็เลือก Stored Procedure นั้นแล้วคลิกขวา เลือก Modify
      จะสังเกตเห็นว่า ALTER PROCEDURE spYourStoredProcedure แทนตอนที่สร้างมันจะเป็น CREATE PROCEDURE spYourStoredProcedure
      เมื่อแก้ไข ก็คลิกปุ่ม Execute เป็นการบันทึก Stored Procedure ที่แก้ไขใหม่นั้น

      ReplyDelete