Bài giảng Hệ quản trị cơ sở dữ liệu - Bài: Lập trình trong SQL server - Nguyễn Ngọc Quỳnh Châu

BiẾN CỤC BỘ Biến là một đối tượng để chứa dữ liệu Gọi là biến cục bộ vì phạm vi hoạt động của biến chỉ nằm trong một thủ tục, một hàm hoặc một lô có chứa lệnh khai báo biến đó. Một lô lệnh (batch) là các câu lệnh liên tiếp nhau và được kết thúc bằng từ khóa GO:  Những câu lệnh nằm trong cùng batch sẽ được xử lý cùng lúc  Lệnh GO dùng để gửi tín hiệu đến cho SQL SERVER biết đã kết thúc một batch job và yêu cầu thực thi.

pdf21 trang | Chia sẻ: thanhle95 | Lượt xem: 500 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Hệ quản trị cơ sở dữ liệu - Bài: Lập trình trong SQL server - Nguyễn Ngọc Quỳnh Châu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH TRONG SQL-SERVER KIỂU DỮ LiỆU TRONG SQL-SERVER Kiểu dữ liệu chỉ định kiểu của dữ liệu và dung lượng có thể lưu trữ của một đối tượng SQL Server hỗ trợ một số kiểu dữ liệu được cài đặt sẵn như sau: Kiểu dữ liệu Kích thước Miền giá trị dữ liệu lưu trữ > Các kiểu dữ liệu dạng số nguyên Int 4 bytes từ-2,147,483,648đến +2,147,483,647 SmallInt 2 bytes từ -32768 đến +32767 TinyInt 1 byte từ 0 đến 255 Bit 1 byte 0, 1 hoặc Null > Các kiểu dữ liệu dạng số thập phân Decimal, Numeric 17bytes từ -10^38 đến +10^38 > Các kiểu dữ liệu dạng số thực Float 8 bytes từ -1.79E+308 đến +1.79E+308 Real 4 bytes từ -3.40E+38 đến +3.40E+38 > Các kiểu dữ liệu dạng chuỗi có độ dài cố định Char N bytes từ 1 đến 8000 ký tự, mỗi ký tự là một byte > Các kiểu dữ liệu dạng chuỗi có độ dài biến đổi VarChar N bytes từ 1 đến 8000 ký tự, mỗi ký tự là 1 byte > Các kiểu dữ liệu dạng chuỗi dùng font chữ Unicode NChar 2*N bytes từ 1 đến 4000 ký tự, mỗi ký tự là 2 bytes NVarChar 2*N bytes từ 1 đến 4000 ký tự, mỗi ký tự là 2 bytes > Các kiểu dữ liệu dạng tiền tệ Money 8 bytes từ -922,337,203,685,477.5808 đến +922,337,203,685,477.5807 SmallMoney 4 bytes từ -214,748.3648 đến + 214,748.3647 > Các kiểu dữ liệu dạng ngày và giờ DateTime 8 bytes từ01/01/1753đến31/12/9999 SmallDateTime 4 bytes từ01/01/1900đến06/06/2079 > Các kiểu dữ liệu dạng chuỗi nhị phân (Binary String) Binary N bytes từ 1 đến 8000 bytes VarBinary N bytes từ 1 đến 8000 bytes Image N bytes từ 1 đến 2,147,483,647 bytes HÀM TRONG SQL SERVER Aggregate functions: sum(), min(), max(), avg() Hàm chuyển đổi: convert() declare @x money set @x=30000 select 'Luong nhan vien A la: ' + convert(char(10), @x) Các hàm ngày tháng Getdate(): cho biết ngày tháng hiện tại Dateadd(datepart, number, date): để thêm ngày/tháng/năm vào date Datediff(datepart, date1, date2): tính khoảng cách của date2-date1 Datename(datepart, date): cho biết tên tiếng Anh của ngày tháng Datepart(datepart, date): BiẾN CỤC BỘ Biến là một đối tượng để chứa dữ liệu Gọi là biến cục bộ vì phạm vi hoạt động của biến chỉ nằm trong một thủ tục, một hàm hoặc một lô có chứa lệnh khai báo biến đó. Một lô lệnh (batch) là các câu lệnh liên tiếp nhau và được kết thúc bằng từ khóa GO:  Những câu lệnh nằm trong cùng batch sẽ được xử lý cùng lúc  Lệnh GO dùng để gửi tín hiệu đến cho SQL SERVER biết đã kết thúc một batch job và yêu cầu thực thi. Tên các biến cục bộ phải bắt đầu bằng @ Cách khai báo: DECLARE @tên_biến kiểu dữ liệu Ví dụ: DECLARE @hoten nchar(20) DECLARE @diachi nchar(50) DECLARE @luong float, @ngaysinh datetime Chú ý: kiểu dữ liệu text, ntext hoặc image không được chấp nhận khi khai báo biến Từ khóa SET hay SELECT được dùng để gán giá trị cho biến Cú pháp SET @tên_biến = giá_trị hoặc SELECT @tên_biến = giá_trị Ví dụ: SET @hoten=N’Nguyễn Thị Thái’ Ví dụ: Tính lương trung bình của các nhân viên của phòng ‘KT’ DECLARE @luong_tb float SELECT @luong_tb=avg(luong) FROM NHANVIEN WHERE MAP=‘KT’ Để hiển thị giá trị của biến: PRINT @tên_biến Ví dụ: tính lương cao nhất, lương thấp nhất của phòng ‘KT’. Hiển thị kết quả ra màn hình DECLARE @min_luong float, @max_luong float SELECT @min_luong=min(luong), @max_luong=max(luong) FROM NHANVIEN PRINT ‘Luong cao nhat la: ‘ + convert (char(10), @min_luong) PRINT @max_luong CÂU LỆNH IFELSE Cú pháp IF điều_kiện BEGIN tập_lệnh END ELSE BEGIN tập_lệnh END Các toán tử logic: AND, OR, NOT Các toán tử so sánh: >, =, (!=) Toán tử so sánh IS / IS NOT dùng để so sánh với giá trị NULL declare @luong1 float, @luong2 float select @luong1= AVG(luong) from Nhanvien where MaDV='0001' select @luong2= AVG(luong)from Nhanvien where MaDV='0002' if @luong1>@luong2 begin print 'Luong trung binh don vi 1 lon hon don vi 2 la: ' print abs(@luong1-@luong2) end else print 'Luong trung binh don vi 2 lon hon don vi 1 la: '+ convert(chAR(20), abs(@luong1-@luong2)) GO VÒNG LẶP WHILE Cú pháp: WHILE điều_kiện BEGIN tập_lệnh END Tập lệnh sẽ được thực hiện cho đến khi biểu thức điều kiện có giá trị FALSE Có thể dùng lệnh BREAK để thoát khỏi vòng lặp Ví dụ DECLARE @count int =10 WHILE @count>=0 BEGIN PRINT ‘Hello’ SET @count=@count-1 if @count <5 break END TỪ KHÓA RETURN Từ khóa RETURN được sử dụng ở một ví trí bất kỳ để thoát ra khỏi khối hoặc thủ tục Những câu lệnh đằng sau RETURN sẽ không được thực hiện THỦ TUC NỘi TẠI Là một “chương trình con” của SQL Server La tập hợp các câu lệnh T-SQL được biên dịch trước SP được dặt tên và được xử lý như một khối lệnh thống nhất Ưu điểm của SP:  Tối ưu hóa tốc độ truy vấn trong SQL Server  Tính module hóa, tái sử dụng một cách dễ dàng Có thể có các tham số vào, tham số ra và có thể trả về kết quả Cú pháp CREATE PROCEDURE | PROC Danh sách các tham số AS BEGIN tập lệnh END Ví dụ: Tạo một SP để lấy ra danh sách nhân viên của phòng ‘KT’ CREATE PROC List_Empl @phong char(10) AS BEGIN Set @phong=‘KT’ SELECT * FROM NHANVIEN WHERE PHONG=@phong END