Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 122 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
122
Dung lượng
3,57 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH HỆ QUẢN TRỊ SQL SERVER MỤC LỤC CHƯƠNG 1: TỔNG QUAN MICROSOFT SQL SERVER 1.1 Giới thiệu Microsoft SQL Server 1.1.1 Hệ quản trị CSDL quan hệ kiểu Client/ Server 1.1.2 Các dịch vụ SQL Server 1.1.3 Ngơn ngữ lập trình Transact – SQL (T-SQL) 1.2 Các công cụ SQL Server 1.2.1 Books Online 1.2.2 SQL Server Configuration Manager 1.2.3 SQL Server Profiler 1.2.4 Import Export Data 1.3 Microsoft SQL Server Management Studio 1.3.1 Mở SQL Server Management Studio 1.3.2 Các thành phần cửa sổ Management Studio 1.3.3 Trang truy vấn Query Editor 1.4 Khai báo kết nối Microsoft SQL Server từ máy trạm 1.5 Một số thao tác đơn giản 10 1.5.1 Backup lại Database 10 1.5.2 Phục hồi Database (Restore) 12 1.5.3 Gở bỏ Database (Detach) 16 1.5.4 Đính kèm Database (Attach) 17 1.5.5 Take Offline/ Bring Online 19 1.6 Bài tập cuối chương 19 CHƯƠNG 2: DATABASE 20 2.1 Các thành phần sở liệu (Database – CSDL) 20 2.2 Loại file lưu trữ Database 20 2.2.1 File liệu 20 2.2.2 Database hệ thống 21 2.3 Tạo – Xóa Database 21 2.3.1 Tạo Database 21 2.3.2 Xóa Database 25 2.4 Tách CSDL khỏi SQL Server 26 2.4.1 Dùng giao diện Explorer 26 2.4.2 Dùng câu lệnh 27 2.5 Gắn CSDL vào SQL Server 27 2.5.1 Sử dụng Object Explorer 27 2.5.2 Sử dụng câu lệnh 29 2.6 Thay đổi thông tin CSDL 29 2.6.1 Sử dụng Object Explorer 29 2.6.2 Sử dụng câu lệnh 30 2.6.3 Xem thông tin CSDL 31 2.7 Bài tập cuối chương 33 CHƯƠNG 3: TABLE 34 3.1 Các kiểu liệu 34 3.1.1 Exact Numerics (Số xác) 34 3.1.2 Approximate Numerics (Số gần đúng) 34 3.1.3 Date and Time - Ngày 34 3.1.4 Character strings - Chuỗi ký tự ASCII 35 3.1.5 Unicode character strings – Chuỗi ký tự Unicode 35 3.1.6 Binary Strings - Chuỗi số nhị phân 35 3.1.7 Một số kiểu khác 35 3.2 Các phép toán 35 3.3 Tạo table CSDL 36 3.3.1 Bằng lệnh Create Table 36 3.3.2 Sử dụng Object Explorer 42 3.4 Thay đổi cấu trúc ràng buộc 43 3.4.1 Bằng lệnh Alter Table 44 3.4.2 Sử dụng Object Explorer 47 3.4.3 Xem thông tin table 47 3.4.4 Xóa Table 48 3.4.5 Đổi tên Table 48 3.4.6 Mơ hình quan hệ liệu 48 3.4.7 Tạo mơ hình quan hệ 49 3.5 Bài tập cuối chương 50 CHƯƠNG 4: TRUY VẤN DỮ LIỆU 52 4.1 Một số hàm T-SQL 52 4.1.1 Hàm toán học 52 4.1.2 Hàm xử lý chuỗi ký tự 52 4.1.3 Hàm xử lý ngày tháng thời gian 52 4.1.4 Hàm chuyển đổi kiểu giá trị 53 4.1.5 Hàm hệ thống 55 4.1.6 Hàm CASE 56 4.2 Phát biểu truy vấn liệu 57 4.2.1 Mệnh đề FROM 57 4.2.2 Mệnh đề WHERE 60 4.2.3 Mệnh đề SELECT 61 4.2.4 Mệnh đề ORDER BY 63 4.2.5 Mệnh đề GROUP BY 63 4.2.6 Mệnh đề HAVING 63 4.2.7 Mệnh đề COMPUTE 64 4.2.8 Mệnh đề COMPUTE BY 64 4.2.9 Các câu truy vấn lồng 65 4.3 Phép toán tập hợp 67 4.4 Bài tập cuối chương 68 CHƯƠNG 5: CẬP NHẬT DỮ LIỆU 70 5.1 Thêm mẫu tin 70 5.1.1 Thêm mẫu tin 70 5.1.2 Thêm mẫu tin lấy từ bảng khác 70 5.1.3 Thêm liệu từ file vào cột Varbinary(Max) 71 5.2 Sửa nội dung mẫu tin 72 5.2.1 Thay đổi nội dung cột liệu 72 5.2.2 Thay đổi nội dung cột kiểu varbinary(Max) 72 5.2.3 Thay đổi phần liệu với hàm Write 72 5.3 Xóa mẫu tin 73 5.3.1 Dùng phát biểu Delete 73 5.3.2 Dùng phát biểu Truncate 74 5.4 Truy xuất thông tin cập nhật 74 5.4.1 Table Inserted Deleted 74 5.4.2 Mệnh đề Output 76 5.5 Bài tập cuối chương 78 CHƯƠNG 6: VIEW 79 6.1 Khái niệm 79 6.2 Tạo View 79 6.2.1 Bằng lệnh Create View 79 6.2.2 Bằng công cụ Manage 80 6.3 Xem thông tin View 82 6.4 Thay đổi định nghĩa View 83 6.5 Xóa View 83 6.6 Bài tập cuối chương 83 CHƯƠNG 7: STORED PROCEDURE 85 7.1 Khái niệm 85 7.2 Tạo Stored Procedure 86 7.2.1 Bằng lệnh Create Procedure 86 7.2.2 Các phát biểu điều khiển 87 7.2.3 Sửa, xóa thủ tục 92 7.2.4 Xem thông tin thủ tục 93 7.3 Bài tập cuối chương 93 CHƯƠNG 8: TRANSACTION 95 8.1 Transaction (giao tác) 95 8.1.1 Các phát biểu đóng gói Transaction 95 8.1.2 Phân đoạn nhóm lệnh Transaction 95 8.1.3 Kiểm soát lỗi thực 96 8.2 Bài tập cuối chương 96 CHƯƠNG 9: TRIGGER 100 9.1 Khái niệm 100 9.2 Tạo Trigger cho Table 100 9.3 Nhận biết cột cập nhật 104 9.4 Chỉ định thứ tự thực Trigger 105 9.5 Thực hay không thực Trigger 106 9.6 Hiệu chỉnh Trigger 106 9.7 Xóa Trigger 106 9.8 Bài tập cuối chương 106 CHƯƠNG 10: CURSOR 108 10.1 Khái niệm 108 10.2 Các loại Cursor 111 10.3 Xử lý đồng thời 113 10.4 Bài tập cuối chương 115 TÀI LIỆU THAM KHẢO 116 CHƯƠNG 1: TỔNG QUAN MICROSOFT SQL SERVER 1.1 Giới thiệu Microsoft SQL Server [1][3] 1.1.1 Hệ quản trị CSDL quan hệ kiểu Client/ Server Microsoft SQL Server hệ quản trị CSDL quan hệ (Relation Database Management System - RDBMS) hoạt động hệ thống mạng theo mô hình Client/ Server cho phép nhiều người dùng từ máy trạm truy cập liệu lưu máy chủ Sử dụng Transact-SQL để trao đổi liệu Client computer SQL Server computer Một RDBMS bao gồm databases, database engine ứng dụng dùng để quản lý liệu phận khác RDBMS SQL Server tối ưu để chạy môi trường sở liệu lớn (Very Large Database Environment) lên đến Tera-Byte phục vụ lúc cho hàng ngàn user Hình 1.1: Mơ hình Server – Client 1.1.2 Các dịch vụ SQL Server Dịch vụ tích hợp - Integration Services (SSIS): rút trích, biến đổi hợp liệu (consolidate data) từ nhiều nguồn dự liệu khác (disparate sources) Công nghệ CSDL - Database Engine: dịch vụ lõi SQL Server, lưu trữ, xử lý, bảo mật liệu Dịch vụ phân tích - Analysis Services: xử lý phân tích trực tuyến (online analytical processing - OLAP); khai mỏ liệu (Data Mining) cho ứng dụng đánh giá tình hình thương mại Dịch vụ báo cáo - Reporting Services: tạo quản lý báo cáo với nhiều dạng thức khác nhau: dạng bảng (tabular), đồ họa (graphical)… Các báo cáo xuất Web Môi giới dịch vụ - Service Broker: Cung cấp nhiều sở hạ tầng (infrastructure) cần thiết để xây dựng ứng dụng CSDL, làm giảm đáng kể thời gian phát triển ứng dụng Tái tạo liệu – Replication: chép, phân phối liệu tới CSDL vị trí khác, từ xa hay di động thông qua hệ thống mạng, sau đồng CSDL để trì tính đồng liệu (consistency) Full-Text Search: Phục vụ cho việc tìm kiếm từ, nhóm từ liệu dạng văn lưu table Dịch vụ thông báo - Notification Services: Phục vụ cho việc phát triển triển khai ứng dụng tạo gởi thông báo tới người dùng nhiều loại thiết bị khác Error! Hình 1.2: Một số dịch vụ tích hợp MS SQL Server 1.1.3 Ngơn ngữ lập trình Transact – SQL (T-SQL) T-SQL ngơn ngữ thủ tục hệ thứ Không dùng để tạo chương trình ứng dụng độc lập Các phát biểu, thủ tục hàm viết T-SQL thực môi trường SQL Server với mục đích truy vấn hiệu chỉnh liệu CSDL quan hệ Cho phép gọi thực từ ngơn ngữ lập trình khác, T-SQL có phát biều phân loại sau: • Data Control Language (DCL): Chứa lệnh điều khiển, phân quyền truy xuất liệu • Data Definition Language (DDL): dùng tạo, sửa xóa (CREATE, ALTER, DROP) đối tượng CSDL – Database, Table, Procedure… • Data Manipulation Language (DML): chứa lệnh thêm, sửa, xoá liệu (INSERT, UPDATE, DELETE) • Data Query Language (DQL): Chỉ chứa phát biểu SELECT dùng truy vấn liệu • Các thành phần khác ngôn ngữ kiểu liệu, biến, toán tử, hàm, cấu trúc điều khiển thích 1.2 Các cơng cụ SQL Server 1.2.1 Books Online Sách hướng dẫn trực tuyến vấn đề liên quan đến Microsoft SQL Server Hình 1.3: Giao diện Book Online 1.2.2 SQL Server Configuration Manager SQL Server Services: Khởi động (Start), tạm dừng (pause) dừng (stop) dịch vụ Microsoft SQL Server SQL Server Network Configuration: Quản lý nghi thức kết nối mạng (Network Protocol) máy chủ phục vụ cho việc trao đổi thông tin máy chủ máy trạm SQL Native Client Configuration: Quản lý nghi thức kết nối mạng mặc định máy trạm thực nối kết vào Microsoft SQL Server máy chủ Hình 1.4: SQL Server Configuration Manager 1.2.3 SQL Server Profiler Quản lý biến cố xảy thực xử lý máy chủ, giúp cho việc phân tích tìm lỗi thực câu lệnh truy vấn Hình 2.5: SQL Server profiler Where a.MaMH = b.MaMH And SoTon - b.SL < If (@D > ) Begin Print ‘Không đủ hàng để bán’ RollBack Tran Return End Update MatHang Set SoTon = SoTon – SL From INSERTED Where MatHang.MaMH = INSERTED.MaMH Khi Delete mẫu tin CTHD SoHD MaLH SL DGBan 10246 30 10246 10 10246 42 10248 56 10 10248 12 10248 23 10249 10 10249 30 10249 100 20 DELETED SoHD MaLH SL DGBan 10249 100 20 Ví dụ: Khi xóa chi tiết hóa đơn phải tăng số tồn mặt hàng ghi chi tiết hóa đơn Create Trigger trg_XoaCTHD On CTHD For Delete As Update MatHang Set SoTon = SoTon + SL From DELETED Where MatHang.MaMH = DELETED.MaMH 102 Khi Update mẫu tin CTHD SoHD MaLH SL DGBan 10246 30 10246 10 10246 42 10248 56 10 10248 12 10248 23 10249 10 10249 30 10249 10 20 INSERTED DELETED SoHD MaLH SL DGBan SoHD MaLH SL DGBan 10249 10249 10 20 100 20 Ví dụ: Khi sửa SoHD CTHD, kiểm tra RB: Một hóa đơn khơng có q 10 chi tiết hóa đơn CTHD T + S + [SoHD] X - Create Trigger utrg_SoCTHD On CTHD For Update As If (Select Count(a.SoHD) From CTHD a, INSERTED b Where a.SoHD = b.SoHD) >10 Begin Print ‘Số chi tiết hóa đơn khơng thể > 10’ RollBack Tran End Go Ví dụ: Khi sửa số lượng chi tiết hóa đơn phải sửa số tồn mặt hàng ghi chi tiết hóa đơn Create Trigger utrg_SuaCTHD 103 On CTHD For Update As Declare @D int Select @D = Count(*) From MatHang a, DELETED b, INSERTED c Where a.MaMH = b.MaMH And a.MaMH = c.MaMH And SoTon + b.SL c.SL < If (@D > ) Begin Print ‘Không đủ hàng để bán’ RollBack Tran Return End Go Update MatHang Set SoTon = SoTon + b.SL – c.SL From MatHang a, DELETED b, INSERTED c Where a.MaMH = b.MaMH And a.MaMH = c.MaMH 9.3 Nhận biết cột cập nhật [1] Hàm Update() : Trả giá trị TRUE cập nhật liệu Ví dụ: Khi sửa thơng tin chi tiết hóa đơn – Nếu sửa SoHD kiểm tra RB “Một hóa đơn khơng có q 10 CTHD” – Nếu sửa SL thay đổi số tồn mặt hàng Ví dụ: Sử dụng hàm Update Create Trigger utrg_CTHD On CTHD For Update As If Update(SoHD) If (Select Count(a.SoHD) From CTHD a, INSERTED b Where a.SoHD = b.SoHD)>10 104 Begin RollBack Tran Return End If Update(SL) Begin Declare @D int Select @D = Count( * ) From MatHang a, DELETED b, INSERTED c Where a.MaMH = b.MaMH And a.MaMH = c.MaMH And SoTon + b.SL – c.SL < If (@D > ) Begin RollBack Tran Return End Update MatHang Set SoTon = SoTon + b.SL – c.SL From MatHang a, DELETED b, INSERTED c Where a.MaMH = b.MaMH And a.MaMH = c.MaMH End 9.4 Chỉ định thứ tự thực Trigger [1] – Nếu thao tác Table mà có nhiều Trigger (khác tên nhau) Khi thứ tự thực trigger xác định dựa thứ tự tạo chúng – Để thay đổi thứ tự thực mặc định này, sử dụng thủ tục: sp_settriggerorder[@triggername = ] 'Tên trigger' , [@order = ] 'First | Last | None ' , [@stmttype = ] 'Insert | Update | Delete' Ví dụ: Chỉ định thực trigger sp_SetTriggerOrder itrg_SoCTHD, First, ‘Insert’ sp_SetTriggerOrder itrg_GiamTon, Last, ‘Insert’ – Thủ tục định trigger thực Trigger thực cuối Các Trigger lại thực theo thứ tự tạo chúng 105 9.5 Thực hay không thực Trigger [1] ALTER TABLE ENABLE | DISABLE TRIGGER ALL | [,…n] Ví dụ: Khơng thực tất Triggers table CTHD ALTER TABLE DISABLE TRIGGER ALL Ví dụ: Không thực Trigger itrg_SoCTHD utrg_SoCTHD table CTHD ALTER TABLE DISABLE TRIGGER itrg_SoCTHD, utrg_SoCTHD 9.6 Hiệu chỉnh Trigger [1] ALTER TRIGGER ON [WITH ENCRYPTION] AFTER | FOR {DELETE, INSERT, UPDATE} AS GO Ví dụ: Thay đổi Trigger utrg_SuaCTHD table CTHD tác động update delete Alter trigger utrg_SuaCTHD On CTHD For Update, Delete As … 9.7 Xóa Trigger [1] DROP TRIGGER [,…n] Ví dụ: Xóa trigger utrg_SuaCTHD Drop trigger utrg_SuaCTHD 9.8 Bài tập cuối chương Sử dụng sở liệu tạo tập cuối chương 8, tạo trigger thực yêu cầu sau: a) Khi thêm chi tiết phiếu nhập, tự động: 106 - Tăng thêm trị giá phiếu nhập (TGNhap) tương ứng với trị giá sản phẩm thêm vào phiếu nhập, trị giá sản phẩm thêm vào phiếu nhập = SLNhap*DGNhap - Tăng SLN, TGN sản phẩm tương ứng table sản phẩm với số lượng trị giá sản phẩm thêm vào phiếu nhập b) Khi thêm chi tiết phiếu xuất, tự động: - Tăng thêm trị giá phiếu xuất (TGXuat) tương ứng với trị giá sản phẩm thêm vào phiếu xuất, trị giá sản phẩm thêm vào phiếu xuất = SLXuat*DGXuat - Tăng SLX, TGX sản phẩm tương ứng table sản phẩm với số lượng trị giá sản phẩm thêm vào phiếu xuất c) Khi xóa dịng chi tiết phiếu nhập, tự động: - Giảm trị giá nhập (TGNhap) phiếu nhập tương ứng table phiếu nhập - Giảm số lượng nhập (SLN) trị giá nhập (TGN) sản phẩm tương ứng table sản phẩm - Nếu phiếu nhập tương ứng khơng cịn dịng chi tiết xóa ln phiếu nhập d) Khi xóa dịng chi tiết phiếu xuất, tự động: - Giảm trị giá xuất (TGXuat) phiếu xuất tương ứng table phiếu xuất - Giảm số lượng xuất (SLX) trị giá xuất (TGX) sản phẩm tương ứng table sản phẩm - Nếu phiếu xuất tương ứng khơng cịn dịng chi tiết xóa ln phiếu xuất e) Khi sửa dịng chi tiết phiếu nhập, tự động cập nhật TGNhap, SLN, TGN table phiếu nhập, table sản phẩm tương ứng f) Khi sửa dòng chi tiết phiếu xuất, tự động cập nhật TGXuat, SLX, TGX table phiếu xuất, table sản phẩm tương ứng g) Mỗi chi tiết phiếu nhập tối đa nhập sản phẩm h) Mỗi chi tiết phiếu xuất tối đa xuất sản phẩm i) Không sửa ngày nhập, ngày xuất phiếu nhập, phiếu xuất Sử dụng sở liệu “Thể thao đội” tạo tập cuối chương 3, tạo trigger: j) Kiểm tra ràng buộc trận đấu gặp gỡ đội đội phải thuộc phái (giới tính) 107 CHƯƠNG 10: CURSOR 10.1 Khái niệm Kiểu trỏ - Cursor kiểu liệu cho phép truy xuất đến mẩu tin tập kết trả câu lệnh Select Ngoài ra, bạn sử dụng phát biểu Update Delete để cập nhật hay xóa mẩu tin hành bảng sở Select mệnh đề WHERE CURRENT OF Các thao tác chung Cursor Khai báo cursor: DECLARE CURSOR FOR Mở cursor: OPEN Sau lệnh mở cursor, trỏ mẩu tin hành nằm vùng BOF Xử lý mẩu tin cursor: Di chuyển mẩu tin hành: FETCH NEXT FROM cursor_name Kiểm tra kết lệnh FETCH: Sử dụng hàm @@FETCH_STATUS sau lệnh FETCH Hàm trả giá trị Nếu lệnh FETCH chuyển đến mẩu tin danh sách -1 Nếu lệnh FETCH chuyển đến vùng BOF EOF -2 Nếu chuyển đến dòng bị xóa Server (Keyset) Sử dụng phát biểu Update Delete để cập nhật hay xóa mẩu tin hành với định mệnh đề WHERE là: Where Current Of Đóng cursor: CLOSE Hủy bỏ cursor: DEALLOCATE Ví dụ: In danh sách đề tài gồm mã số tên đề tài CREATE proc spDSDeTai As Declare @ms char(6), @ten varchar(30) Declare curDeTai cursor SCROLL for select msdt, tendt from DeTai Open curDeTai Fetch next from curDeTai into @ms, @ten While @@fetch_status = Begin 108 Print @ms + ‘ - ‘ + @ten Fetch Next from curDeTai into @ms, @ten End Close curDeTai Deallocate curDeTai GO Ví dụ: In danh sách đề tài gồm mã số tên đề tài, với đề tài in điểm giáo viên chấm đề tài CREATE proc spDSDeTai As Declare @ms char(6), @ten varchar(30) Declare @MSGV int, @Diem Float Declare curDeTai cursor SCROLL for select msdt, tendt from DeTai Open curDeTai Fetch Next From curDeTai into @ms, @ten While @@fetch_status = Begin Print @ms + ‘ – ‘ + @ten In mã số teen đề tài Declare curDiem Cursor For Select MSGV, Diem From GV_HDDT Where MSDT=@ms Union All Select MSGV, Diem From GV_HDPB Where MSDT=@ms Union All Select MSGV, Diem From GV_HDUV Where MSDT=@ms Open curDiem Fetch Next From curDiem Into @MSGV, @Diem While @@Fetch_Status = Begin Print ‘ ‘ + Cast(@MSGV As VarChar) + ‘ | ‘ +Cast(@Diem As VarChar) Fetch Next From curDiem Into @MSGV, @Diem 109 End Close curDiem DeAllocate curDiem Fetch Next from curDeTai into @ms, @ten End Close curDeTai Deallocate curDeTai GO Mở rộng khai báo Cursor DECLARE CURSOR [ LOCAL | GLOBAL ] Phạm vi hoạt động [ FORWARD_ONLY | SCROLL ] Phương thức di chuyển [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] Loại Cursor [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] Xử lý đồng thời [ TYPE_WARNING] FOR [ FOR UPDATE [ OF ColumnName [, …n] ] ] Phạm vi hoạt động Cursor Mặc định, cursor có phạm vi Global kết nối mà tạo Nghĩa là, sử dụng cursor gói thực kết nối đó, trừ đóng giải phóng Cursor Nếu mở Cursor chưa đóng bị lỗi có bị treo đóng kết nối Với lý đó, khơng sử dụng Cursor Global, nên đóng giải phóng Cursor Nếu muốn tạo cursor Local bạn phải định rõ ràng khai báo cursor Declare Cursv Cursor Local For Select MSSV, Tensv From Sinhvien Order By Tensv Cursor Local có phạm vi hoạt động bên gói tạo nó, tự giải phóng kết thúc gói Phương thức di chuyển Cursor Có phương thức di chuyển mẩu tin hành: FORWARD_ONLY: phương thức cho phép di chuyển sang mẩu tin (Fetch Next) 110 Nếu có Forward_Only mà khơng định loại Cursor (Static, Keyset, Dynamic, Fast_Forward) Cursor thuộc loại Dynamic Nếu khơng định phương thức di chuyển phương thức Forward_Only mặc định, trừ khai báo Static, Keyset, Dynamic loại cursor có phương thức di chuyển mặc định Scroll SCROLL: Cho phép di chuyển lên xuống tập mẩu tin 10.2 Các loại Cursor Có loại Cursor: FAST_FORWARD: cursor đọc có phương thức di chuyển Forward_Only Khi dùng từ khóa Fast_Forward khơng dùng phương thức Scroll STATIC: có thuộc tính READ ONLY, khơng thể cập nhật bảng thơng qua Cursor Khi tạo Cursor Static, liệu từ bảng gốc Copy sang bảng tạm CSDL tempdb Do đó, table nguồn Cursor bị thay đổi liệu liệu khơng xuất Cursor DYNAMIC: Cho phép cập nhật liệu table nguồn (dùng mệnh đề WHERE CURRENT OF phát biểu UPDATE or DELETE), tự động hiển thị tất thay đổi từ table nguồn Tuy nhiên, liệu thứ tự mẩu tin tập mẩu tin bị thay đổi Ví dụ: Điền lại mã sinh viên Create Proc spDienMSSV As Declare @I Int Khai báo biến Con trỏ Declare Cursv Cursor Dynamic For Select MSSV, Tensv From Sinhvien Order By Tensv Open Cursv Mở trỏ Xử lý mẩu tin trỏ Set @I = Fetch Next From Cursv While @@Fetch_Status = Begin Update Sinhvien Set MSSV = @I Where Current Of Cursv Fetch Next From Cursv 111 Set @I = @I + End Close Cursv Đóng trỏ Deallocate Cursv Giải phóng trỏ Go KEYSET: Giống cursor Dynamic Nhưng tạo bảng nguồn có khai báo khóa, khơng SQL tự động chuyển sang loại STATIC Sử dụng TYPE_WARNING để nhận thông báo ý Cursor thực chuyển đổi ngầm định từ kiểu yêu cầu sang kiểu khác (Cursor created was not of the requested type.) Khi tạo Cursor KEYSET, tập khóa bảng nguồn lưu table CSDL tempdb Do đó, việc xóa mẩu tin thay đổi giá trị khóa bảng nguồn không thông qua Cursor không phản hồi tập mẩu tin Nếu bạn sửa đổi liệu thuộc tính khơng thuộc tính khóa tập mẩu tin nhận liệu bị thay đổi Ví dụ: Thay đổi tên học hàm (TenHH) table HocHam In danh sách học hàm trước thay đổi Declare cur Cursor Global Keyset Type_Warning For Select * From HocHam Declare @MS smallint, @Ten Varchar(20) Open cur Fetch First From cur Into @MS, @Ten While @@Fetch_Status=0 Begin Print Cast(@MS as Varchar) + ‘ ’ + @Ten Fetch Next From cur Into @MS, @Ten End Thay đổi tên học hàm học hàm có mã = Update HocHam Set TenHH = ‘G.Su’ Where MSHH = In danh sách học hàm sau thay đổi Fetch First From cur Into @MS, @Ten While @@Fetch_Status = 112 Begin Print Cast(@MS as Varchar) + ‘ ’ + @Ten Fetch Next From cur Into @MS, @Ten End Close cur Deallocate cur Go 10.3 Xử lý đồng thời Trong môi trường nhiều người dùng làm việc tập liệu, làm để Users chắn thay đổi họ không bị thay đổi người dùng khác? Phụ thuộc vào kiểu Cursor mà bạn sử dụng, bạn nhận thấy thay đổi bạn đóng Cursor mở lại Trừ sử dụng cursor transaction, không table nguồn cursor khơng tự động khóa liệu SQL Server có chọn lựa cho phép ngăn cản việc sửa đổi mẩu tin thực xong cách khóa table nguồn cursor để bảo vệ thay đổi bạn READ_ONLY: Dùng truy xuất liệu mà không sửa đổi liệu SCROLL_LOCKS: Khố dịng đọc vào Cursor User khác OPTIMISTIC: Khơng khóa dịng đọc vào Cursor Do đó, mẩu tin bị người khác thay đổi việc cập nhật hay xóa mẩu tin Cursor bị lỗi khơng thực Khai báo cột Cursor phép cập nhật UPDATE [OF column_name [, n]] Nếu định OF column_name [, n] cột liệt kê sửa đổi Nếu định UPDATE mà khơng định danh sách cột, tất cột có khả cập nhật trừ định READ_ONLY Truy xuất liệu Cursor FETCH [ NEXT | PRIOR | FIRST | LAST | ABSOLUTE { n | @nvar } | RELATIVE { n | @nvar } ] FROM [ GLOBAL ] cursor_name [ INTO @variable_name [ , n ] ] 113 NEXT: Chuyển sang mẩu tin PRIOR: Chuyển mẩu tin trước FIRST: Chuyển mẩu tin LAST: Chuyển đến mẩu tin cuối ABSOLUTE {n | @nvar}: Nếu n or @nvar > 0, tìm đến dịng thứ n tính từ dịng đếm xuống tập mẩu tin Nếu n or @nvar < 0, tìm đến dịng thứ n tính từ dịng cuối đếm lên Nếu n or @nvar = 0, chuyển đến vùng BOF khơng có giá trị trả Hằng số n phải số nguyên biến @nvar phải thuộc kiểu tinyint, smallint int Không sử dụng phương thức ABSOLUTE cho kiểu DYNAMIC RELATIVE {n | @nvar}: Nếu n @nvar > 0, chuyển xuống n dịng tính từ dịng kề dịng hành Nếu n or @nvar < 0, Chuyển lên n dòng tính từ dịng trước dịng hành Nếu n or @nvar = 0, trả dòng hành cursor_name: Tên cursor mở Nếu tồn cursor cục cursor tồn cục có tên tên cursor sử dụng cursor cục từ khóa GLOBAL INTO @varname[, n]: Danh sách biến cục nhận liệu tương ứng từ cột mẩu tin hành, theo thứ tự từ trái sang phải Số biến phải số cột liệt kê câu lệnh Select tạo Cursor Kiểu liệu biến phải tương thích với kiểu liệu cột hỗ trợ chuyển kiểu ngầm định theo kiểu cột Ví dụ: In danh sách sinh viên gồm mã số tên sinh viên CREATE proc spCur As Declare @ms char(6), @ten varchar(30) Declare a Cursor SCROLL For Select MSSV, TenSV From SinhVien Open a Fetch Next From a Into @ms, @ten While @@fetch_status = Begin Print @ms + ‘ – ’ + @ten 114 Fetch Next From a Into @ms, @ten End Close a Deallocate a GO 10.4 Bài tập cuối chương Sử dụng CSDL tạo tập cuối chương 8, thực yêu cầu sau: a) Sử dụng kiểu CURSOR, viết thủ tục in (print) mã sản phẩm, tên sản phẩm, đơn vị tính sản phẩm table sản phẩm b) Sử dụng kiểu CURSOR, viết thủ tục cập nhật SLN, TGN, SLX, TGX tất sản phẩm table sản phẩm c) Sử dụng kiểu CURSOR, viết thủ tục cập nhật TGNhap tất phiếu nhập table phiếu nhập d) Sử dụng kiểu CURSOR, viết thủ tục cập nhật TGXuat tất phiếu xuất table phiếu xuất e) Giả sử cập nhật giá trị field TGNhap, TGXuat table phiếu nhập, phiếu xuất, cập nhật giá trị field SLN, TGN, SLX, TGX table sản phẩm Sử dụng kiểu CURSOR, viết thủ tục: Duyệt nội dung table chi tiết phiếu nhập, cập nhật lại TGNhap table phiếu nhập SLN, TGN table sản phẩm Duyệt nội dung table chi tiết phiếu xuất, cập nhật lại TGXuat table phiếu xuất SLX, TGX table sản phẩm 115 TÀI LIỆU THAM KHẢO [1] Alison Balter, Sams Teach Yourself Microsoft® SQL Server™ 2005 Express in 24 Hours, Sams, 2006 [2] Edward Whalen and etc, Microsoft SQL Server 2005 Administrator’s Companion, Microsoft Press, 2006 [3] Phạm Hữu Khang, SQL Server 2005 Lập trình T-SQL, Nhà xuất Lao Động Xã Hội, 2007 116 ... 116 CHƯƠNG 1: TỔNG QUAN MICROSOFT SQL SERVER 1.1 Giới thiệu Microsoft SQL Server [1][3] 1.1.1 Hệ quản trị CSDL quan hệ kiểu Client/ Server Microsoft SQL Server hệ quản trị CSDL quan hệ (Relation... LỤC CHƯƠNG 1: TỔNG QUAN MICROSOFT SQL SERVER 1.1 Giới thiệu Microsoft SQL Server 1.1.1 Hệ quản trị CSDL quan hệ kiểu Client/ Server 1.1.2 Các dịch vụ SQL Server 1.1.3... lập trình Transact -SQL 1.3.1 Mở SQL Server Management Studio Hình 1.7: Giao diện kết nối Server Server Type: Chọn dịch vụ Server Name: Chọn máy chủ cài SQL Server tên thể SQL Server có dạng