Stored Procedure in SQL Server
Stored Procedure គឺជាបណ្តុំនៃ SQL Statement ដែលធ្វើការងារពិសេសណាមួយ ហើយវាអាចធ្វើការ Request ទៅកាន់ Server ម្តងមួយ Block នៃ Statement តែម្តង ឬ ក៏អាចបង្កើតជាសំណុំការគណនាណាមួយដែលគោលការណ៍នៃក្រុមហ៊ុន ដែលប្រើនូវ T SQL ឬ Built-in Function របស់ SQL Server តែម្តង ។
1. បង្កើត Stored Procedure
ការបង្កើត Stored Procedure មានរូបមន្តដូចខាងក្រោម៖ Syntax: Create proc[edure] procedure_name @parameternamedatatype=[default] As T-sql statement(s) ឧទាហរណ៍ ៖ Create Proc[edure] prostu As Select * from tblstudent; ការដំណើរការ Stored Procedure ដែលបានបង្កើតរួច Execute: Exec[ute] prostu;;
2. Parameter នៅក្នុង Stored Procedure
នៅក្នុងការបង្កើត Stored Procedure ជាទូទៅយើងការប្រើ Paremeter ដើម្បីធ្វើការទៅតាមការងារដែលយើងបង្កើត Procedure នោះ តែនៅក្នុង Pararmeter យើងក៏មានច្រើនប្រភេទសម្រាប់ធ្វើការទទួលតម្លៃដូចនេះយើងត្រូវកំណត់ Parameter ឱ្យបានច្បាស់នៅពេលបង្កើតនោះ។ ខាងក្រោមនេះជា Parameter ធម្មតានៅក្នុង Procedure តែប្រសិនបើយើងចង់កំណត់ Default ទៅឱ្យ Parameter ឬ តម្លៃទទេរ CREATE PROCEDURE GetTaskEvents @TaskName varchar(50), @ID int = NULL AS BEGIN -- SP Logic END;
នៅក្នុង Stored Procedure មាន Parameter ចំនួន ៣ ប្រភេទ គឺ ៖ Input, Output និង Optional
CREATE PROCEDURE [Sales].[udpGetSalesByTerritory]
@TerritoryID int,
@SumTotalSubTotal money = 10000 OUTPUT,
@SumTotalDue money OUTPUT
AS
SELECT
@SumTotalSubTotal = SUM(SubTotal),
@SumTotalDue = SUM(TotalDue)
FROM Sales.SalesOrderHeader
WHERE TerritoryID = @TerritoryID) AND
(SubTotal > @SumTotalSubTotal)
បង្កើត Stored Procedure នៅក្នុង SQL Server Create Proc [SP_Subject] @FacID int,@Years int,@Semester nvarchar(50),@AcademicYear nvarchar(50) as If @Semester='second session' Select SubID,SubName from tblSubjects Where FacID=@FacID and Years=@Years and AcademicYear=@AcademicYear Else Select SubID,SubName from tblSubjects Where FacID=@FacID and Years=@Years and Semester in(@Semester) and AcademicYear=@AcademicYear
ហៅ Stored Procedure ប្រើជាមួយនឹង Class SQLCommand នៅក្នុង VB.NET
Dim cmd As New SqlCommand(“SP_Subject", con)
con.Open()
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@FacID", SqlDbType.Int).Value = cmbFaculty.SelectedValue
cmd.Parameters.Add("@Years", SqlDbType.Int).Value =cmbYear.SelectedValue
cmd.Parameters.Add("@Semester", SqlDbType.Int).Value = cmbSemester.SelectedValue
cmd.Parameters.Add("@AcademicYear", SqlDbType.NVarChar, 50).Value = cmbAcademicYear.SelectedValue
Dim dtSubject As New DataTable
dtSubject.Load(cmd.ExecuteReader())
con.Close()
gvSubject.DataSource = dtSubject
ហៅ Stored Procedure ប្រើជាមួយនឹង Class SQLDataAdapter នៅក្នុង VB.NET
Dim da As New SqlDataAdapter(“SP_Subject", con)
da.SelectCommand.CommandType=CommandType.StoredProcedure
da.SelectCommand.Parameters.Add("@FacID", SqlDbType.Int).Value = cmbFaculty.SelectedValue
da.SelectCommand.Parameters.Add("@Years", SqlDbType.Int).Value = cmbYear.SelectedValue
da.SelectCommand.Parameters.Add("@Semester", SqlDbType.Int).Value = cmbSemester.SelectedValue
da.SelectCommand.Parameters.Add("@AcademicYear", SqlDbType.NVarChar, 50).Value = cmbAcademicYear.SelectedValue
Dim dtSubject As New DataTable
Da.Fill(dtSubject)
gvSubject.DataSource = dtSubject
ខាងក្រោមនេះជាការបង្កើត OUTPUT Parameter នៅក្នុង Procedure ALTER Proc [dbo].[sp_output] @Name nvarchar(50),@ID nvarchar(50) OUTPUT as SELECT @ID = names FROM tblinfo Where Names=@Name តើយើងត្រូវប្រើយ៉ាងមិចនៅក្នុងការសរសេរ Code នៅក្នុង VB.NET ឬ C#? គឺយើងត្រូវកំណត់ Property Direction ទៅឱ្យ Parameter នោះស្មើនឹង ParameterDirection.Output
Dim cmd As New SqlCommand("sp_output", con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 50).Value = "sok"
cmd.Parameters.Add("@ID", SqlDbType.NVarChar, 50)
cmd.Parameters("@ID").Direction = ParameterDirection.Output
con.Open()
cmd.ExecuteReader()
con.Close()
MessageBox.Show(cmd.Parameters("@ID").Value)
ចូលបង្កើត Procedure ដែលធ្វើការ Insert Delete និង Update ទៅកាន់ Table student.
ឧទាហរណ៍ ៖
Insert ទិន្នន័យចូលទៅកាន់ Table info
Create Proc SP_InsertData
@Name nvarchar(50),@Phone nvarchar(50),@email nvarchar(255)
As
Insert into tblinfo(Names,Phone,Email) Values(@Name,@Phone,@Email)
Delete ទិន្នន័យចេញពី Table info
Create Proc SP_DeleteData @ID int
As
Delete From tblinfo Where ID=@ID;
Update ទិន្នន័យចេញពី Table info Create Proc SP_UpdateData @ID int,@name nvarchar(50),@phone nvarchar(50),@email nvarchar(255) As Update tblinfo SET Names=@name,Phone=@phone,Email=@Email Where ID=@ID លំហាត់ ចូរធ្វើការបង្កើត Stored Procedure មួយដែលធ្វើការ Insert ទិន្នន័យចូលក្នុង Table Order និង Update ទិន្នន័យនៅក្នុង Table Stock_Out ។
Exercise
1. ចូរធ្វើការបង្កើត Sequence នៅក្នុង SQL Server ដែលមានទម្រង់ដូចខាងក្រោម៖ Pro001, Cus001, Stu001 ដែលបី Character ខាងមុខជាអក្សរហើយបីលេខខាងក្រោយ Auto Number 14070001, 14070002, 14070003, 14071001, 14071002, 14071003, 14072001 ធ្វើការបង្កើត Sequence ដែលកើតឡើងតាមថ្ងៃ និងឆ្នាំ Function ដែលត្រូវប្រើ - GetDate() សម្រាប់ទាញយកថ្ងៃ ខែ បច្ចុប្បន្ន - Year(GetDate()) សម្រាប់ទាញយកឆ្នាំបច្ចុប្បន្ន - Left(Expression,Count) សម្រាប់ចាប់យកផ្នែកណាមួយនៃ Expression ទៅតាមចំនួន Character នៅខាងឆ្វេង ។ 2. ចូរបង្កើត Procedure ដែលអាចធ្វើការ Insert, Update ទៅលើ Table ណាមួយ ដោយប្រើ SQLCommand និង SQLDataAdapter ព្រមទាំង OutPut Parameter ផងដែរ ។T-SQL In SQL Server
1. Variable Declaration
អញ្ញាត្តិនៅក្នុង SQL Server ក៏មិនមានអីខុសពីភាសា Programming ផ្សេងៗដែរ គឺយើងត្រូវមាន Keyword ឬ Syntax សម្រាប់បង្កើត ។ Syntax: Declare @Var_Name [as] DataType=Value; ឧទាហរណ៍ DECLARE @iVariable INT, @vVariable VARCHAR(100), @dDateTime DATETIME SET @iVariable = 1 SET @vVariable = 'myvar' SET @dDateTime = GETDATE() SELECT @iVariable iVar, @vVariable vVar, @dDateTime dDT GO ឬ DECLARE @iVariable INT = 1, @vVariable VARCHAR(100) = 'myvar', @dDateTime DATETIME = GETDATE() SELECT @iVariable iVar, @vVariable vVar, @dDateTime dDT GO
2. Operator នៅក្នុង SQL Server
Arithmetic Operator + បូក - ដក * គុណ / ចែក % ចែកយកសំណល់ Assignment Operator (=) DECLARE @MyCounter INT; SET @MyCounter = 1; Comparison Operator = ស្មើនឹង > ធំជាង < តូចជាង >= ធំជាងឬស្មើ <= តូចជាងឬស្មើ <> មិនស្មើនឹង != មិនស្មើនឹង (not ISO standard) !< មិនតូចជាង (not ISO Standard) !> មិនធំជាង (not ISO Standard) Compound Operator += សម្រាប់បូកបន្ថែមនឹងខ្លួនឯង -= សម្រាប់ដកខ្លួនឯងនឹងតម្លៃផ្សេងទៀត *= សម្រាប់គុណបន្ថែមនឹងខ្លួនឯង /= សម្រាប់ខ្លួនឯងចែកនឹងតម្លៃផ្សេងទៀត %= សម្រាប់ខ្លួនឯងចែកយកសំណល់នឹងតម្លៃផ្សេងទៀត Logical Operators AND សម្រាប់ភ្ជាប់លក្ខខណ្ឌពីរ ឬ ច្រើនបញ្ចូលគ្នា ។ ANY ៖ ប្រសិនបើ subquery របស់អ្នកផ្តល់មកវិញនូវ Scalar Value, អ្នកប្រើ comparison operator ។ SELECT e.ID,e.name FROM Employee e WHERE e.salary > ANY (SELECT average Salary FROM job) BETWEEN .. and .. សម្រាប់កំណត់ចន្លោះតម្លៃណាមួយ ។ IN សម្រាប់ប្រៀបធៀបតម្លៃច្រើនវាប្រហាក់ប្រហែលនឹង Or ដែរ ។ LIKE សម្រាប់ប្រៀបធៀបទិន្នន័យដែលមានលក្ខខណ្ឌស្រដៀងហើយវាអាស្រ័យទៅតាម Wild Cart Operator ។ NOT សម្រាប់កំណត់ឱ្យវាផ្ទុយពីលក្ខខណ្ឌដែលយើងចង់ប្រៀបធៀប ។ OR សម្រាប់ជម្រើសក្នុងការប្រៀបធៀប ។
