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 សម្រាប់ជម្រើសក្នុងការប្រៀបធៀប ។
3. Control Structure
3.1 If Statement
ខាងក្រោមនេះជា Syntax របស់ IF Statement
IF Boolean_expression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
ឧទាហរណ៍៖
Declare @Result float=67
If @Result>=50
Print 'Passed'
Else
Print 'Fail'
3.2 Case When
គេប្រើ Case When សម្រាប់សិក្សាលក្ខខណ្ឌដែរតែវាអាចផ្តល់មកវិញនូវតម្លៃមួយក្នុងចំណោមតម្លៃជាច្រើនដែលយើងបានដាក់លក្ខខណ្ឌ ។
Syntax:
- Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
- Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
ឧទាហរណ៍ ៖
ប្រើជាមួយ Select Statement
SELECT ProductNumber, Name, "Price Range" =
CASE
WHEN ListPrice = 0 THEN 'Mfg item - not for resale'
WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
ELSE 'Over $1000'
END
FROM Production.Product
ORDER BY ProductNumber ;
ប្រើជាមួយ Order By
SELECT BusinessEntityID, SalariedFlag
FROM Employee
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC
,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;
3.3 While Statement
នៅក្នុង SQL Server គេប្រើ Loop ដើម្បីឱ្យសកម្មភាពមួយ ឬ Statement មួយធ្វើការដដែល ទៅតាមលក្ខខណ្ឌដែលយើងចង់បាន ។
Syntax:
WHILE Boolean_expression
{sql_statement | statement_block | BREAK | CONTINUE}
ឧទាហរណ៍
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300
BEGIN
UPDATE Production.Product SET ListPrice = ListPrice * 2
SELECT MAX(ListPrice) FROM Production.Product
IF (SELECT MAX(ListPrice) FROM Production.Product) > $500
BREAK
ELSE
CONTINUE
END
PRINT 'Too much for the market to bear';
4. Try … Catch
យើងប្រើ Try Catch ដើម្បីធ្វើបង្ហាញការ Error ជា Message ឬ លេខនៃការ Error ហើយទប់ស្កាត់នូវការបង្ហាញនូវ Message ដែលមានភាពរញ៉េរញ៉ៃ ។
Try … Catch
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
[ ; ]
ERROR_NUMBER() Returns លេខដែលតំនាងឱ្យការ Error នោះ។
ERROR_SEVERITY() Returns The Severity.
ERROR_STATE() Returns លេខដែលតំនាងឱ្យការ Error នោះ។
ERROR_PROCEDURE() Returns ឈ្មោះ Stored Procedure ឬ Trigger ពេលដែលមាន Error ។
ERROR_LINE() Returns ទីតាំងនៃ Line ដែលបណ្តាលឱ្យ Error នោះ។
ERROR_MESSAGE() Returns អត្ថន័យដែល Error នោះ ព្រមទាំងតម្លៃលេខនៃការ Error នោះដែរ ។
5. Wait For
ឧទាហរណ៍៖
ខាងក្រោមនេះជាឧទាហរណ៍ដែលកំណត់ឱ្យ Stored Procedure ធ្វើការនៅម៉ៅង ២២:២០ នាទី ។
USE msdb;
EXECUTE sp_add_job @job_name = 'TestJob';
BEGIN
WAITFOR TIME '22:20';
EXECUTE sp_update_job @job_name = 'TestJob', @new_name = 'UpdatedJob';
END;
ខាងក្រោមនេះជាឧទាហរណ៍ដែលកំនត់ឱ្យ Stored Procedure ធ្វើការនៅ ២ ម៉ោងក្រោយ ។
BEGIN
WAITFOR DELAY '02:00';
EXECUTE sp_helpdb;
END;
6. Sequence
Sequence ជាលក្ខណៈថ្មីមួយរបស់ SQL Server ដែលមាននាទីសម្រាប់ធ្វើការកំណត់នូវ Auto Number ណាមួយដែលអ្នកចង់បាន នៅក្នុង SQL server 2012 អ្នកអាចធ្វើការបង្កើត Sequence បាន តាមទម្រង់ដូចខាងក្រោម ៖
Syntax: CREATE SEQUENCE sequence_name
START With -- ជាចំណុចចាប់ផ្តើមរបស់ Sequence
INCREMENT by -- សម្រាប់កំណត់ចំនួននៃការកើន
MINVALUE -- តម្លៃតូចបំផុតនៃ Sequence
MAXVALUE -- តម្លៃធំបំផុតនៃ Sequence
CYCLE -- សម្រាប់កំណត់ឱ្យវាត្រឡប់មកសារដើមវិញនៅពេលតម្លៃ នៃ Sequence កើនដល់ Maxvalue
CACHE;
ឧទាហរណ៍ ៖ ខាងក្រោមនេះជាបង្កើត Sequence ដែលមានឈ្មោះថា CountBy1 ដែលចាប់ផ្តើមពីលេខ 1 និង កើនឡើងម្តងមួយ ។
CREATE SEQUENCE CountBy1
START WITH 1
INCREMENT BY 1 ;
ប្រសិនបើអ្នកចង់បង្ហាញព័ត៌មានរបស់ Sequence តាមរយៈ Query ដូចខាងក្រោម
SELECT * FROM sys.sequences WHERE name = 'CountBy1‘

ប្រសិនបើអ្នកបង្កើត Sequence ដោយយក Default Value នោះអ្នកនឹងបាន
ប្រសិនបើអ្នកបង្កើត Sequence ដោយយក Default Value នោះអ្នកនឹងបាន
CREATE SEQUENCE Test.TestSequence ;
សម្រាប់ការហៅ Sequence ដែលយើងបានបង្កើតមកប្រើនៅក្នុង SQL Statement
Alter Sequence CountBy1 Restart with 1
DECLARE @myvar1 bigint = NEXT VALUE FOR CountBy1
DECLARE @myvar2 bigint ;
DECLARE @myvar3 bigint ;
SET @myvar2 = NEXT VALUE FOR CountBy1 ;
SELECT @myvar3 = NEXT VALUE FOR CountBy1 ;
SELECT @myvar1 AS myvar1, @myvar2 AS myvar2, @myvar3 AS myvar3 ;
ការហៅ Sequence ប្រើនៅក្នុង Table និងបង្កើត Auto Number ជាមួយអក្សរនៅក្នុង SQL Server
- បង្កើត Table មួយដែលមាន 2 Fields
CREATE TABLE MyTable
( IDColumn nvarchar(25) PRIMARY KEY,name varchar(25) NOT NULL) ;
- បង្កើត Seuqence មួយឈ្មោះ CounterSeq
CREATE SEQUENCE CounterSeq
AS int
START WITH 1
INCREMENT BY 1 ;
- ធ្វើការកែប្រែ Table ដែលបានបង្កើតខាងលើដោយបន្ថែម Auto Number ទៅលើ Fields IDColumn ។
ALTER TABLE MyTable
ADD
DEFAULT N'AdvWorks_' +
CAST(NEXT VALUE FOR CounterSeq AS NVARCHAR(20))
FOR IDColumn;
- ធ្វើការបញ្ចូលទិន្នន័យទៅក្នុង Table MyTable
INSERT MyTable (name)
VALUES ('Larry') ;
- ទាញទិន្នន័យមកបង្ហាញ
SELECT * FROM MyTable;

7. OFFSET និង FETCH
សម្រាប់ទាញទិន្នន័យចេញពី Database និងបង្ហាញនៅលើ GridView ទៅតាម Current Page ។
OFFSET មាននាទីសម្រាប់កំណត់ចំណុចចាប់ផ្តើមនៃ Record ដែលយើងចង់បង្ហាញ ។
FECTH មាននាទីសម្រាប់កំណត់ចំនួន Records ដែលយើងត្រូវយកមកបង្ហាញ ។
Syntax:
SELECT * FROM TableName ORDER BY ID
OFFSET Start ROWS
FETCH NEXT Count ROWS ONLY;
ឧទារហណ៍ ៖
SELECT * FROM tblBodyCompares ORDER BY BodyID
OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY;
ខាងក្រោមនេះយើងធ្វើការបង្កើត Variable ចំនួនពីរសម្រាប់ បោះតម្លៃទៅឱ្យ OFFSET និង Fetch Next
DECLARE @OffsetRows tinyint = 0, @FetchRows tinyint = 20;
SELECT TransactionID, ProductID, TransactionDate, Quantity, ActualCost
FROM TransactionHistory
ORDER BY TransactionDate DESC
OFFSET @OffsetRows ROWS
FETCH NEXT @FetchRows ROWS ONLY;
8. ROW_NUMBER()
សម្រាប់ធ្វើការ Order នៅលេខរៀងសារជាថ្មីដែល Order ទៅតាម Field ណាមួយ
Select ROW_NUMBER() Over(Order by BodyID) as [No],*
From tblBodyCompares

សម្រាប់ធ្វើការទាញទិន្នន័យចេញពី Database ទៅតាម Limit Row ដែល User បានកំណត់នៅក្នុងចន្លោះណាមួយ ។
SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY BodyID) AS sequencenumber, *
FROM tblBodyCompares) AS TempTable
WHERE sequencenumber > 0 and sequencenumber <= 10