)
RETURNS <Function_Data_Type> AS
BEGIN
DECLARE <@ResultVar> <Function_Data_Type> SELECT <@ResultVar> =
<@Parameter_Name1,…,@Parameter_NameN> RETURN <@ResultVar>
END
Ví dụ: Thêm điều kiện, nếu chưa đủ dữ liệu đánh giá (kí hiệu là -1) thì điểm chữ là I, nếu chưa nhận được kết quả thi (kí hiệu là -2) thì điểm chữ là X cho hàm Scalar_Convert.
CREATE FUNCTION Scalar_Convert(@diemso float) RETURNS char(1)
AS BEGIN
Có thể bạn quan tâm!
- Chọn Các Thông Số Cho Chỉ Mục
- Ngôn Ngữ Dll Của Thủ Tục Lưu Trữ
- Các Loại Hàm Người Dùng Và Ngôn Ngữ Dll Cho Hàm Người Dùng
- Các Đặc Trưng Và Hạn Chế Của Trigger
- Các Lệnh Hệ Thống Và Các Hàm Sử Dụng Trong Trigger
- SQL Server - 22
Xem toàn bộ 323 trang tài liệu này.
DECLARE @diemchu char(1)
If @diemso>=8.5 SELECT @diemchu='A' else If @diemso>=7 SELECT @diemchu='B' else If @diemso>=5.5 SELECT @diemchu='C' else If @diemso>=4 SELECT @diemchu='D' else If @diemso>=0 SELECT @diemchu='F' else If @diemso=-1 SELECT @diemchu='I' else SELECT @diemchu='X'
RETURN @diemchu
END
b) Hàm nội tuyến Cú pháp:
ALTER FUNCTION <Inline_Function_Name> (
<@Parameter_Name1> <Datatype1>,
…
<@Parameter_NameN> <DatatypeN>
)
RETURNS TABLE
AS RETURN (
SELECT 0
)
Ví dụ: Sửa hàm Inline_VD1 tìm kiếm theo mã ưu tiên. ALTER FUNCTION Inline_VD1(@but nvarchar(15)) RETURNS TABLE
AS RETURN (
SELECT Dbo.Thisinh.sobd, Dbo.Thisinh.hoten, Dbo.Thisinh.ngaysinh,
from Dbo.Thisinh
Where Dbo.Thisinh.maut=@but
)
c) Hàm đa lệnh Cú pháp:
ALTER FUNCTION <Table_Function_Name> (
<@Parameter_Name1> <Datatype1>,
…
<@Parameter_NameN> <DatatypeN>
)
RETURNS <@Table_Variable_Name> TABLE
(
<Column_1> <Data_Type_For_Column1>,
…,
<Column_N> <Data_Type_For_ColumnN>
) AS
BEGIN
…
Insert into <@Table_Variable_Name>[(<Column_1>,…<Column_N>)]
<Select …From …Where>
… RETURN END
Ví dụ: Thêm trường ngày sinh cho hàm Table_VD1. ALTER FUNCTION Table_VD1(@man nvarchar(20)) RETURNS @ThuKhoaN
TABLE (
sobaodanh nvarchar(10), hoten nvarchar(50),
man nvarchar(20), ns date,
tongdiem float
) AS
BEGIN
declare @diemmax float set @diemmax =
(select Max(dtoan+dly+dhoa) from thisinh where man=@man)
insert into @thukhoan
select sbd, hoten,ngaysinh,man,dtoan+dly+dhoa as tdiem from thisinh
where dtoan+dly+dhoa=@diemmax and man=@man
RETURN
END
3) Xóa hàm người dùng
Tác dụng: Xóa hàm người dùng đã tạo Cú pháp:
DROP FUNCTION <FUNCTION_Name>
Với <Fucntion_Name> là tên hàm người dùng sẽ bị xóa. Ví dụ: Xóa hàm người dùng có tên là Table_VD2 DROP FUNCTION Table_VD2
4.2.3. Thao tác với hàm người dùng
1) Tạo hàm người dùng
- Dùng công cụ MS
+ Tạo hàm vô hướng
Bước 1: Chọn tên cơ sở dữ liệu/Chọn Programmability/Chọn Functions/Chọn Scalar-Valued Functions/Chọn chuột phải/Chọn New Scalar-Valued Functions.
Hình 4.9. Xây dựng hàm vô hướng
Bước 2: Viết đoạn mã lệnh xây dựng hàm vô hướng. Bước 3: Chọn nút để kiểm tra câu lệnh T-SQL.
Bước 4: Chọn nút để thực hiện câu lệnh xây dựng hàm vô hướng.
+ Tạo hàm nội tuyến
Bước 1: Chọn tên cơ sở dữ liệu/Chọn Programmability/Chọn Functions/Chọn Table-Valued Functions/Chọn chuột phải/Chọn New Inline Table-Valued Function.
Hình 4.10. Xây dựng hàm trực tuyến
Bước 2: Viết đoạn mã lệnh xây dựng hàm nội tuyến. Bước 3: Chọn nút để kiểm tra câu lệnh T-SQL.
Bước 4: Chọn nút để thực hiện câu lệnh xây dựng hàm nội tuyến.
+ Tạo hàm đa lệnh
Bước 1: Chọn tên cơ sở dữ liệu/Chọn Programmability/Chọn Functions/Chọn Table-Valued Functions/Chọn chuột phải/Chọn New Multi-statement Table-Valued Function.
Hình 4.11. Xây dựng hàm đa lệnh
Bước 2: Viết đoạn mã lệnh xây dựng hàm đa lệnh. Bước 3: Chọn nút để kiểm tra câu lệnh T-SQL.
Bước 4: Chọn nút để thực hiện câu lệnh xây dựng hàm đa lệnh.
- Dùng câu lệnh T-SQL
Bước 1: Chọn nút New Query , xuất hiện cửa sổ New Query
Bước 2: Viết đoạn mã lệnh xây dựng hàm (vô hướng, trực tuyến, đa lệnh); trước khi viết câu lệnh xây dựng hàm phải khai báo sử dụng cơ sở dữ liệu bằng lệnh USE.
Bước 3: Chọn nút để kiểm tra câu lệnh T-SQL.
Bước 4: Chọn nút để thực hiện câu lệnh tạo thủ tục lưu trữ. Kết quả tạo các hàm người dùng
Hình 4.12. Kết quả tạo các hàm người dùng
2) Lời gọi hàm Cú pháp:
dbo.Table_Function_Name(List_Real_Pamramater) Trong đó:
List_Real_Pamramater là danh sách các tham số thực sự.
a) Hàm vô hướng:
Đối với hàm vô hướng, ta có thể gọi thực hiện chúng tại bất kỳ nơi nào mà một biểu thức vô hướng có kiểu dữ liệu tương đương được chấp nhận trong các câu lệnh T- SQL. Hàm vô hướng có thể được sử dụng như là một biểu thức:
- Trong mệnh đề SELECT, WHERE, HAVING, GROUP BY, ORDER BY.
- Trong mệnh đề SET bên trong một câu lệnh UPDATE.
- Trong mệnh đề VALUES của câu lệnh INSERT.
- Trong kiểm tra ràng buộc dạng CHECK constraint.
- Trong câu lệnh điều khiển.
- Để định nghĩa giá trị mặc định của trường trong bảng bằng từ khóa DEFAULT.
- Cho các trường có dạng trường tính toán trong bảng (Computed columns)
Ví dụ 1: Đưa ra các thông tin gồm: Số báo danh, họ tên, ngày sinh của những thí sinh quê „Nam Định‟.
use QLTS
select sbd, QLMBH.dbo.Scalar_chuanhoa(hoten), ngaysinh from Thisinh
where QLMBH.dbo.Scalar_chuanhoa(quequan)='Nam Dinh' Ví dụ 2: Thêm một bản ghi vào bảng Ngành.
use QLTS
declare @tenn nvarchar(50) declare @man nvarchar(20) declare @ct int
set @man=' MN018 '
set @tenn=' Ngoai ngu ' set @ct=100
print qlmbh.dbo.scalar_chuanhoa(@man) insert into nganh
values(qlmbh.dbo.scalar_chuanhoa(@man),qlmbh.dbo.scalar_chuanhoa(@tenn
),@ct)
Ví dụ 3: Chuẩn hóa tên thí sinh trong bảng thí sinh. Use QLTS
Update Thisinh
set hoten=qlmbh.dbo.scalar_chuanhoa(hoten) Ví dụ 4: Trả về thứ của ngày hiện tại.
use QLTS
declare @thu nvarchar(10)
select @thu=dbo.Scalar_VD1(GETDATE()) print @thu
b) Hàm nội tuyến và hàm đa lệnh
Đối với hàm nội tuyến và hàm đa lệnh, ta có thể coi chúng như là một bảng.
Ví dụ 1: Đưa các thông tin gồm: Số báo danh, họ tên, ngày sinh của những thí sinh có quê quán là „Nam Dinh‟.
use qlts
select * from dbo.Inline_VD1('Nam Dinh')
Ví dụ 2: Đưa ra các thông tin gồm: Số báo danh, họ tên, ngày sinh, tên ngành, tổng điểm 3 môn và điểm cộng của những thí sinh đã dự thi có tổng điểm 3 môn và điểm cộng nhỏ nhất với tên ngành cho trước.
use qlts select *
from dbo.Inline_VD2('Khoa hoc may tinh')
where dbo.Inline_VD2.td= (select max(dbo.Inline_VD2.td) from dbo.Inline_VD2('Khoa hoc may tinh'))
Ví dụ 3: Đưa các thông tin gồm: Số báo danh, họ tên, tổng điểm ba môn của những thí sinh dự thi ngành „MN01‟ có tổng điểm cao nhất ba môn.
use qlts
select * from dbo.table_VD1('MN01')
Ví dụ 4: Đưa các thông tin gồm: Số báo danh, họ tên, tổng điểm ba môn, tên ngành của những thí sinh có tổng điểm cao nhất của mỗi ngành với mã ngành là
„MN01‟.
use qlts
select dbo.table_VD1.sobaodanh, dbo.table_VD1.hoten, dbo.table_VD1.tongdiem,Nganh.tenn
from dbo.table_VD1('MN02') inner join dbo.Nganh on dbo.table_VD1.man= dbo.Nganh.man
Ví dụ 5: Đưa ra các thông tin gồm: Mã mặt hàng, tên mặt hàng, mua bán, đơn giá của mỗi mặt hàng trong 2009. Biết rằng nếu với mỗi mặt hàng mua thì đơn giá tăng lên 10%, còn với mỗi mặt hàng bán thì đơn giá tăng lên 20%.
use qlmbh select *
from dbo.Table_VD2(2009,10,20)
3) Thay đổi hàm
Cách 1: Chọn loại hàm/Chọn tên hàm/Chọn chuột phải/Chọn Modify. Cách 2: Dùng câu lệnh Alter function
4) Xóa hàm
Cách 1: Chọn loại hàm/Chọn tên hàm/Chọn chuột phải/Chọn Delete/Chọn OK. Cách 2: Dùng câu lệnh Drop function