Procedure (Stored Procedure) เป็นโปรแกรมในฐานข้อมูลที่ประกอบด้วยหลายคำสั่ง ที่คุณบันทึกไว้เพื่อใช้งานภายหลัง ใน SQL Server คุณสามารถส่งพารามิเตอร์เข้าไปใน Procedure แม้จะไม่คืนค่าเฉพาะเจาะจงเหมือนฟังก์ชัน แต่จะระบุว่าดำเนินการสำเร็จหรือล้มเหลว
บทความนี้จะให้ไวยากรณ์และตัวอย่างวิธีสร้างและลบ Procedure ใน SQL Server
CREATE PROCEDURE
ไวยากรณ์
การสร้าง Procedure ใน SQL Server ใช้ไวยากรณ์ดังนี้:
CREATE {PROCEDURE | PROC} [schema_name.] procedure_name
[@parameter [type_schema_name.] datatype
[VARYING] [= default] [OUT | OUTPUT | READONLY]
, @parameter [type_schema_name.] datatype
[VARYING] [= default] [OUT | OUTPUT | READONLY]]
[WITH {ENCRYPTION | RECOMPILE | EXECUTE AS Clause}]
[FOR REPLICATION]
AS
BEGIN
[declaration_section]
executable_section
END;
พารามิเตอร์:
- schema_name: ชื่อสคีม่า (schema) ที่เป็นเจ้าของ Procedure
- procedure_name: ชื่อที่กำหนดให้ Procedure
- @parameter: พารามิเตอร์หนึ่งหรือหลายตัวที่ส่งเข้าไปในฟังก์ชัน
- type_schema_name: ชนิดข้อมูลของสคีม่า (หากมี)
- datatype: ชนิดข้อมูลสำหรับ @parameter
- default: ค่าเริ่มต้นที่กำหนดให้ @parameter
- OUT / OUTPUT: @parameter เป็นพารามิเตอร์เอาต์พุต
- READONLY: @parameter ไม่สามารถเขียนทับโดย Procedure ได้
- ENCRYPTION: รหัสต้นทางของ Procedure จะไม่ถูกเก็บเป็นข้อความในระบบ
- RECOMPILE: คำสั่งจะไม่ถูกแคช (cache) สำหรับ Procedure นี้
- EXECUTE AS clause: ระบุบริบทความปลอดภัยในการดำเนินการ Procedure
- FOR REPLICATION: Procedure ที่บันทึกจะดำเนินการเฉพาะระหว่างกระบวนการ replication
ตัวอย่าง
CREATE PROCEDURE spNhanvien
@nhanvien_name VARCHAR(50) OUT
AS
BEGIN
DECLARE @nhanvien_id INT;
SET @nhanvien_id = 8;
IF @nhanvien_id < 10
SET @nhanvien_name = 'Smith';
ELSE
SET @nhanvien_name = 'Lawrence';
END;
Procedure ด้านบนชื่อ spNhanvien มีพารามิเตอร์ @nhanvien_name เป็นเอาต์พุต ค่าของพารามิเตอร์จะขึ้นอยู่กับ @nhanvien_id
หลังจากนั้น คุณสามารถเรียกใช้ spNhanvien ได้ดังนี้:
USE [test]
GO
DECLARE @site_name VARCHAR(50);
EXEC FindSite @site_name OUT;
PRINT @site_name;
GO
DROP PROCEDURE (ลบ Procedure)
หลังจากสร้าง Procedure สำเร็จแล้ว ก็จะมีกรณีที่ต้องการลบ Procedure ออกจากฐานข้อมูลด้วยเหตุผลบางอย่าง
ไวยากรณ์
การลบ Procedure มีไวยากรณ์ดังนี้:
DROP PROCEDURE procedure_name;
พารามิเตอร์:
procedure_name: ชื่อ Procedure ที่ต้องการลบ
ตัวอย่าง
DROP PROCEDURE spNhanvien;
การรันคำสั่งนี้จะลบ Procedure spNhanvien ออกจากฐานข้อมูล