Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

-- Declare a variable: @tenbien

-- Declare a variable: DECLARE @tenbien DATA_TYPE


-- Assign a value: SET @tenbien = value
-- Assign a value using SELECT
-- SELECT @tenbien = column_name FROM table WHERE <condition>
-- Control structures
-- IF (condition) <do action> ELSE <do another action>
-- WHILE (condition) <do action>

-- Batch Processing (Stored Procedure)


-- Declaration: CREATE PROCEDURE <PROCEDURE_NAME> LIST OF INPUT PARAMETERS
-- AS
-- BEGIN
-- SELECT STATEMENT
-- END
-- Execute the procedure: EXEC <PROCEDURE_NAME> WITH INPUT VALUES

-- User-Defined Function
/* Create a function: CREATE FUNCTION <FUNCTION_NAME> LIST OF INPUT PARAMETERS +
DATA_TYPE
RETURNS DATA_TYPE
AS
BEGIN
SELECT STATEMENT
RETURN .....
END
Call the function: DBO.<FUNCTION_NAME (LIST OF ARGUMENT VALUES)>
*/

-- Trigger
/*
Create a trigger: CREATE TRIGGER <TRIGGER_NAME> ON <TABLE_NAME>
FOR INSERT/DELETE/UPDATE
AS
BEGIN
DECLARE VARIABLES AND USE THEM
END
*/

-- Retrieve a list of products (Product Code, Product Name) from a specific country
CREATE PROCEDURE pro_InDSSP_QG @QG VARCHAR(40)
AS
BEGIN
SELECT S.MASP, S.TENSP
FROM SANPHAM S
WHERE S.NUOCSX = @QG
END
EXEC pro_InDSSP_QG 'Trung Quoc'

-- Calculate the sum of two integers


CREATE FUNCTION func_TinhTong (@a INT, @b INT)
RETURNS INT
AS
BEGIN
RETURN @a + @b
END
PRINT (DBO.func_TinhTong(2, 3))

-- Calculate the sum of two integers (Corrected version)


CREATE FUNCTION func_TinhTong (@a INT, @b INT)
RETURNS INT
AS
BEGIN
DECLARE @tong INT
SET @tong = @a + @b
RETURN @tong
END
PRINT (DBO.func_TinhTong(2, 3))

-- Write a function to calculate the total amount in an invoice line


CREATE FUNCTION func_TinhTien(@SL INT, @dongia MONEY)
RETURNS MONEY
AS
BEGIN
DECLARE @Thanhtien MONEY
SET @Thanhtien = @SL * @dongia
RETURN @Thanhtien
END
PRINT (DBO.func_TinhTien(2, 10000))

-- Display the details of an invoice with additional total information


SELECT C.SOHD, C.MASP, C.SL, S.DVT, DBO.func_TinhTien(C.SL, S.GIA) AS THANH_TIEN
FROM SANPHAM S, CTHD C
WHERE S.MASP = C.MASP

-- Trigger
-- Constraint: Purchase date must be >= Membership registration date
-- Using temporary tables
-- Two temporary tables: Inserted, Deleted
CREATE TRIGGER trig_ins_HD ON HOADON
FOR INSERT
AS
BEGIN
-- Declare variables to store MAKH and NGAYMUAHANG from the INSERTED table
DECLARE @MAKH CHAR(4), @NGMH SMALLDATETIME, @NGDK SMALLDATETIME
-- Assign values to the variables
SELECT @MAKH = I.MAKH, @NGMH = I.NGHD
FROM INSERTED I
-- Assign the registration date
SELECT @NGDK = K.NGDK
FROM KHACHHANG K
WHERE K.MAKH = @MAKH
-- Check
IF (@NGMH < @NGDK)
BEGIN
PRINT (N'ERROR: Purchase date is before the registration date')
ROLLBACK TRAN
END
ELSE
BEGIN
PRINT (N'SUCCESSFULLY ADDED')
COMMIT TRAN
END
END

-- Cursor example
/*
DECLARE <CURSOR_NAME> CURSOR
FOR
SELECT SELECT STATEMENT
OPEN <CURSOR_NAME>
FETCH NEXT FROM <CURSOR_NAME>
INTO <LIST OF VARIABLES MATCHING THE DATA ATTRIBUTES OF A DATA ROW THAT THE CURSOR
IS CURRENTLY POINTING TO>
-- Variable @@FETCH_STATUS = 0 means there is data
*/

CREATE TRIGGER trig_ins_CTHD ON CTHD


FOR INSERT
AS
BEGIN
DECLARE @SOHD INT, @MASP CHAR(4), @SL INT, @TRIGIA MONEY
-- Retrieve information from the new data row
SELECT @SOHD = I.SOHD, @SL = I.SL, @MASP = I.MASP
FROM inserted I
-- Calculate the new invoice total
SET @TRIGIA = @SL * (SELECT GIA FROM SANPHAM WHERE MASP = @MASP)
-- Iterate over previous invoice lines to calculate the total and add it
-- Declare a cursor
DECLARE CUR_CTHD CURSOR
FOR
SELECT MASP, SL
FROM CTHD
WHERE SOHD = @SOHD
OPEN CUR_CTHD
FETCH NEXT FROM CUR_CTHD
INTO @MASP, @SL
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @TRIGIA = @TRIGIA + (SELECT GIA FROM SANPHAM WHERE MASP = @MASP)
FETCH NEXT FROM CUR_CTHD
INTO @MASP, @SL
END
CLOSE CUR_CTHD
DEALLOCATE CUR_CTHD
-- Update the corresponding invoice total
UPDATE HOADON SET TRIGIA = @TRIGIA WHERE SOHD = @SOHD
END

You might also like