Tập bài giảng SQL Server

MỤC LỤC

LỜI NÓI ĐẦU ............................................................................................................... xi Chƣơng 1. TỔNG QUAN VỀ SQL SERVER ............................................................. 1 1.1. Giới thiệu về SQL Server .................................................................................... 1 1.2. Các mô hình sử dụng trong SQL Server ........................................................... 2 1.2.1. Mô hình Client/Server ..................................................................................... 2 1.2.2. Mô hình Desktop ............................................................................................. 3 1.2.3. Mô hình SOA .................................................................................................. 4 1.3. Các tính năng mới của SQL Server 2008 .......................................................... 4 1.4. Các phiên bản của SQL Server 2008: ................................................................ 5 1.5. Cài đặt SQL Server .............................................................................................. 7 1.6. Các thành phần SQL Server ............................................................................. 14 1.6.1. Thành phần Server ........................................................................................ 14 1.6.2. Thành phần Client ......................................................................................... 15 1.6.3. Các công cụ đồ họa ....................................................................................... 15 1.7. Quản lý các dịch vụ SQL server ....................................................................... 16 1.7.1. Dịch vụ SQL Server Configuration Manager .............................................. 16 1.7.2. Sử dụng SQL Server Management Studio .................................................... 16 1.8. Giới thiệu về SQL server 2012 .......................................................................... 18 Chƣơng 2. NGÔN NGỮ TRANSACTION SQL (T-SQL) ....................................... 23 2.1. Ngôn ngữ T-SQL ................................................................................................ 23 2.1.1. Giới thiệu phát biểu T-SQL........................................................................... 23 2.1.2. Cú pháp của T-SQL ....................................................................................... 24 2.1.3. Lập trình T-SQL ............................................................................................ 25 2.2. Ngôn ngữ định nghĩa dữ liệu ............................................................................. 46 2.2.1. Tạo đối tượng ................................................................................................ 46 2.2.2. Sửa đối tượng ................................................................................................ 50 2.2.3. Xóa đối tượng ................................................................................................ 52 2.2.4. Các loại ràng buộc dữ liệu ............................................................................ 53 2.3. Ngôn ngữ thao tác dữ liệu ................................................................................. 58 2.3.1. Câu lệnh SELECT ......................................................................................... 58 2.3.2. Câu lệnh INSERT .......................................................................................... 67 2.3.3. Câu lệnh UPDATE ........................................................................................ 67 2.3.4. Câu lệnh DELETE ........................................................................................ 68 2.4. Ngôn ngữ điều khiển dữ liệu ............................................................................. 69 2.4.1. Câu lệnh GRANT .......................................................................................... 69 2.4.2. Câu lệnh REVOKE ....................................................................................... 69

i

Tập bài giảng SQL Server

2.4.3. Câu lệnh DENY ............................................................................................ 70 2.5. Thực thi T-SQL .................................................................................................. 70 Chƣơng 3. QUẢN LÝ CƠ SỞ DỮ LIỆU .................................................................. 72 3.1. Cơ sở dữ liệu ....................................................................................................... 72 3.1.1. Các hệ thống cơ sở dữ liệu ............................................................................ 72 3.1.2. Tạo cơ sở dữ liệu ........................................................................................... 74 3.1.3. Cấu trúc cơ sở dữ liệu ................................................................................... 79 3.1.4. Sửa tên cơ sở dữ liệu ..................................................................................... 80 3.1.5. Xoá cơ sở dữ liệu .......................................................................................... 80 3.1.6. Quản lý dung lượng cơ sở dữ liệu ................................................................. 81 3.2. Bảng dữ liệu ........................................................................................................ 82 3.2.1. Tạo cấu trúc bảng .......................................................................................... 82 3.2.2. Thao tác với các ràng buộc dữ liệu ............................................................... 84 3.2.3. Thao tác với bảng dữ liệu .............................................................................. 90 3.3. Chỉ mục ............................................................................................................. 108 3.3.1. Các khái niệm .............................................................................................. 108 3.3.2. Tạo chỉ mục ................................................................................................. 110 3.3.3. Loại bỏ chỉ mục ........................................................................................... 112 3.4. View ................................................................................................................... 112 3.4.1. Khái niệm view ........................................................................................... 112 3.4.2. Các thao tác với View ................................................................................. 112 Chƣơng 4. THỦ TỤC LƢU TRỮ VÀ HÀM NGƢỜI DÙNG .............................. 115 4.1. Thủ tục lƣu trữ (Stored Procedure) ............................................................... 115 4.1.1. Khái niệm .................................................................................................... 115 4.1.2. Các loại thủ tục lưu trữ................................................................................ 116 4.1.3. Ngôn ngữ DLL của thủ tục lưu trữ ............................................................. 118 4.1.4. Tham số trong thủ tục lưu trữ ..................................................................... 120 4.1.5. Giá trị trả về trong thủ tục lưu trữ ............................................................... 122 4.1.6. Thao tác với thủ tục lưu trữ ......................................................................... 123 4.2. Hàm ngƣời dùng (User Defined Functions) ................................................... 126 4.2.1. Khái niệm .................................................................................................... 126 4.2.2. Các loại hàm người dùng và ngôn ngữ DLL cho hàm người dùng ............ 127 4.2.3. Thao tác với hàm người dùng ..................................................................... 136 Chƣơng 5. QUẢN LÝ TRIGGER ............................................................................ 142 5.1. Giới thiệu .......................................................................................................... 142 5.1.1. Khái niệm .................................................................................................... 142 5.1.2. Các ứng dụng của Trigger ........................................................................... 142

ii

Tập bài giảng SQL Server

5.1.3. Các khả năng của Trigger............................................................................ 144 5.1.4. Cơ chế hoạt động của Trigger ..................................................................... 144 5.1.5. Các loại Trigger ........................................................................................... 145 5.1.6. Các đặc trưng và hạn chế của Trigger ......................................................... 145 5.2. Ngôn ngữ DLL của Trigger ............................................................................ 146 5.3. Lập trình với Trigger....................................................................................... 148 5.3.1. Bảng trung gian ........................................................................................... 148 5.3.2. Các lệnh hệ thống và các hàm sử dụng trong trigger .................................. 151 5.3.3. Các thao tác lập trình trigger ....................................................................... 160 5.4. Thao tác với Trigger ........................................................................................ 178 Chƣơng 6. SAO LƢU VÀ PHỤC HỒI DỮ LIỆU .................................................. 181 6.1. Khái niệm sao lƣu cơ sở dữ liệu ...................................................................... 181 6.1.1.Các loại bản sao lưu cơ sở dữ liệu ............................................................... 181 6.1.2. Thực hiện sao lưu ........................................................................................ 182 6.2. Phục hồi cơ sở dữ liệu ...................................................................................... 185 6.2.1. Khái niệm .................................................................................................... 185 6.2.2. Thực hiện phục hồi ...................................................................................... 186 6.3. Xây dựng kế hoạch sao lƣu cơ sở dữ liệu ....................................................... 188 6.3.1. Tạo kế hoạch chi tiết ................................................................................... 188 6.3.2. Tạo nghiệp vụ sao lưu chi tiết ..................................................................... 193 6.4. Sao chép dữ liệu ............................................................................................... 195 Chƣơng 7. QUẢN LÝ BẢO MẬT VÀ NGƢỜI DÙNG ......................................... 202 7.1. Các chế độ xác thực của SQL SERVER ........................................................ 202 7.1.1 Chế độ xác thực thông qua hệ điều hành ..................................................... 202 7.1.2. Chế độ xác thực bằng SQL Server .............................................................. 203 7.2. Các nhóm quyền trên SQL Server ................................................................. 204 7.3.Quản lý tài khoản cho ngƣời sử dụng ............................................................. 205 7.3.1. Tạo tài khoản mới ........................................................................................ 205 7.3.2. Khai báo nhóm quyền cho tài khoản ........................................................... 210 7.3.3.Tài khoản của người dùng trên cơ sở dữ liệu ............................................... 211 Chƣơng 8. SQL SERVER VÀ LẬP TRÌNH ỨNG DỤNG .................................... 217 8.1. Các mô hình kết nối ứng dụng đến SQL Server ........................................... 217 8.1.1. Mô hình ADO .............................................................................................. 217 8.1.2. Mô hình ADO.NET ..................................................................................... 218 8.2. Ví dụ minh họa ................................................................................................. 232 BÀI TẬP ..................................................................................................................... 249 TÀI LIỆU THAM KHẢO .......................................................................................... xii

iii

Tập bài giảng SQL Server

CÁC DANH MỤC HÌNH Hình 1.1. Mô hình Client/Server ..................................................................................... 2 Hình 1.2. Mô hình Desktop ............................................................................................. 3 Hình 1.3. Mô hình OSA .................................................................................................. 4 Hình 1.4. Đặc tính mới của SQL Server ......................................................................... 5 Hình 1.5. Một số phiên bản của SQL Server .................................................................. 5 Hình 1.6. Phiên bản Web ................................................................................................ 6 Hình 1.7. Phiên bản Compact .......................................................................................... 7 Hình 1.8. Xác định bản quyền cài đặt ............................................................................. 7 Hình 1.9. Kiểm tra trước khi cài đặt ................................................................................ 8 Hình 1.10. Các lựa chọn khi cài đặt ................................................................................ 8 Hình 1.11. Kiểm tra các yêu cầu của máy tính trước khi cài đặt .................................... 9 Hình 1.12. Các tính năng cài đặt ..................................................................................... 9 Hình 1.13. Cấu hình cài đặt ........................................................................................... 10 Hình 1.14. Cấu hình Server ........................................................................................... 11 Hình 1.15. Cấu hình Database Engine .......................................................................... 12 Hình 1.16. Cấu hình dịch vụ Report.............................................................................. 12 Hình 1.17. Xác định phản hồi ....................................................................................... 13 Hình 1.18. Các thông số lựa chọn khi cài đặt. .............................................................. 13 Hình 1.19. Thực hiện cài đặt ......................................................................................... 14 Hình 1.20. Các công cụ đồ họa ..................................................................................... 15 Hình 1.21. Cửa sổ Configuration Manager ................................................................... 16 Hình 1.22. Đăng nhập vào SQL Server Management Studio ....................................... 17 Hình 1.23. Cửa sổ đăng nhập ........................................................................................ 18 Hình 1.24. Cửa sổ SQL Server Management Studio. ................................................... 18 Hình 2.1. Tạo kiểu dữ liệu người dùng ......................................................................... 30 Hình 2.2. Thiết lập các thông số cho kiểu dữ liệu người dùng ..................................... 30 Hình 2.3. Kết quả khi xác định tiêu đề trường .............................................................. 59 Hình 2.4. Tạo một script ................................................................................................ 71 Hình 3.1. Cơ sở dữ liệu hệ thống .................................................................................. 72 Hình 3.2. Thay đổi dữ liệu hệ thống ............................................................................. 73 Hình 3.3. Xem dữ liệu hệ thống .................................................................................... 73 Hình 3.4. Cơ sở dữ liệu do người dùng tạo ra ............................................................... 74 Hình 3.5. Tạo cơ sở dữ liệu ........................................................................................... 75 Hình 3.6. Nhập tên cơ sở dữ liệu ................................................................................... 75 Hình 3.7. Chọn tài khoản .............................................................................................. 76

iv

Tập bài giảng SQL Server

Hình 3.8. Thay đổi vị trí lưu tập tin ............................................................................... 76 Hình 3.9. Chọn thư mục chứa tập tin ............................................................................ 77 Hình 3.10. Nhập tên tập tin thứ cấp ............................................................................... 77 Hình 3.11. Khai báo dung lượng ban đầu ...................................................................... 78 Hình 3.12. Khai báo tự động tăng dung lượng .............................................................. 78 Hình 3.13. Cơ sở dữ liệu mới tạo .................................................................................. 78 Hình 3.14. Cửa sổ New Query ...................................................................................... 79 Hình 3.15. Khai báo câu lệnh ........................................................................................ 79 Hình 3.16. Thực thi câu lệnh T-SQL ............................................................................. 79 Hình 3.17. Cấu trúc cơ sở dữ liệu .................................................................................. 80 Hình 3.18. Xóa cơ sở dữ liệu ......................................................................................... 80 Hình 3.19. Xác nhận xóa cơ sở dữ liệu ......................................................................... 81 Hình 3.20. Loại bỏ dung lượng cơ sở dữ liệu dư thừa .................................................. 81 Hình 3.21. Thiết lập thông số cho chức năng Shink ..................................................... 82 Hình 3.22. Bảng trong cơ sở dữ liệu ............................................................................. 82 Hình 3.23. Tạo bảng dữ liệu .......................................................................................... 83 Hình 3.24. Thiết kế bảng dữ liệu ................................................................................... 83 Hình 3.25. Đặt tên bảng dữ liệu .................................................................................... 83 Hình 3.26. Mở bảng ở chế độ Design ............................................................................ 84 Hình 3.27. Tạo ràng buộc khóa chính ........................................................................... 84 Hình 3.28. Tạo ràng buộc khóa ngoại ........................................................................... 85 Hình 3.29. Nhập tên cho ràng buộc khóa ngoại ............................................................ 85 Hình 3.30. Chọn trường cho khóa chính-khóa ngoại .................................................... 85 Hình 3.31. Chọn chế độ Delete và Update ................................................................... 86 Hình 3.32. Kết quả sau tạo ràng buộc khóa ngoại và khóa ngoại ................................ 86 Hình 3.33. Tạo ràng buộc duy nhất ............................................................................... 86 Hình 3.34. Nhập tên cho ràng buộc duy nhất ................................................................ 87 Hình 3.35. Chọn trường cần tạo ràng buộc duy nhất .................................................... 87 Hình 3.36. Kết quả tạo ràng buộc duy nhất .................................................................. 87 Hình 3.37. Tạo ràng buộc kiểm tra ................................................................................ 88 Hình 3.38. Nhập tên cho ràng buộc kiểm tra ................................................................. 88 Hình 3.39. Nhập điều kiện cho ràng buộc kiểm tra ....................................................... 88 Hình 3.40. Kết quả tạo ràng buộc kiểm tra.................................................................... 89 Hình 3.41. Tạo ràng buộc mặc định .............................................................................. 89 Hình 3.42. Kết quả tạo ràng buộc mặc định .................................................................. 89 Hình 3.43. Tạo kết nối giữa các bảng ............................................................................ 90 Hình 3.44. Chọn các bảng dữ liệu ................................................................................. 90

v

Tập bài giảng SQL Server Hình 3.45. Tạo kết nối ................................................................................................... 91 Hình 3.46. Kiểm tra trường kết nối ............................................................................... 91 Hình 3.47. Xác nhận mối kết nối .................................................................................. 91 Hình 3.48. Mối kết nối được tạo ra ............................................................................... 92 Hình 3.49. Lưu mối kết nối ........................................................................................... 92 Hình 3.50. Thay đổi cấu trúc bảng dữ liệu .................................................................... 92 Hình 3.51. Thiết kế lại bảng dữ liệu .............................................................................. 92 Hình 3.52. Xác nhận việc thiết kế lại bảng dữ liệu ....................................................... 93 Hình 3.53. Xóa bảng dữ liệu ......................................................................................... 93 Hình 3.54. Xác nhận việc xóa bảng dữ liệu .................................................................. 94 Hình 3.55. Nhập dữ liệu cho bảng ................................................................................ 94 Hình 3.56. Nhập dữ liệu cho các trường ....................................................................... 95 Hình 3.57. Chọn chức năng Import ............................................................................... 95 Hình 3.58. Chọn dữ liệu nguồn ..................................................................................... 96 Hình 3.59. Chọn dữ liệu đích ........................................................................................ 96 Hình 3.60. Chọn phương thức Import .......................................................................... 97 Hình 3.61. Chọn các Sheet chứa dữ liệu ....................................................................... 97 Hình 3.62. Thực thi và lưu trữ file đóng gói ................................................................. 98 Hình 3.63. Thực hiện Import ......................................................................................... 98 Hình 3.64. Kết quả Import ............................................................................................ 99 Hình 3.65. Chọn chức năng Export ............................................................................... 99 Hình 3.66. Chọn dữ liệu nguồn ................................................................................... 100 Hình 3.67. Chọn dữ liệu đích ...................................................................................... 100 Hình 3.68. Chọn phương thức Export ......................................................................... 101 Hình 3.69. Chọn dữ liệu cần xuất ................................................................................ 101 Hình 3.70. Kiểm tra kiểu dữ liệu ................................................................................. 102 Hình 3.71. Thực thi và lưu trữ file đóng gói ............................................................... 102 Hình 3.72. Thực hiện Export ....................................................................................... 103 Hình 3.73. Cập nhật dữ liệu cho các trường ............................................................... 103 Hình 3.74. Xóa bản ghi ............................................................................................... 104 Hình 3.75. Xác nhận việc xóa bản ghi ........................................................................ 104 Hình 3.76. Chọn chức năng Detach ............................................................................ 105 Hình 3.77. Thực hiện Detach ...................................................................................... 105 Hình 3.78. Chọn chức năng Attach ............................................................................. 106 Hình 3.79. Cửa sổ Attach ............................................................................................ 106 Hình 3.80. Chọn tên tệp tin ......................................................................................... 107 Hình 3.81. Cửa sổ Attach sau khi đã chọn tệp tin ....................................................... 107

vi

Tập bài giảng SQL Server

Hình 3.82. Truy vấn thông tin trong bảng ................................................................... 108 Hình 3.83. Tạo chỉ mục ............................................................................................... 110 Hình 3.84. Chọn các thông số cho chỉ mục ................................................................. 111 Hình 3.85. Chọn trường làm chỉ mục .......................................................................... 111 Hình 3.86. Kết quả tạo chỉ mục liên cung ................................................................... 112 Hình 3.87. Tạo view .................................................................................................... 112 Hình 3.88. Chọn dữ liệu nguồn cho view .................................................................... 113 Hình 3.89. Thiết kế View ............................................................................................ 113 Hình 3.90. Tạo nhóm mới ........................................................................................... 114 Hình 3.91. Thiết kế nhóm ............................................................................................ 114 Hình 4.1. Thông tin về bảng trong cơ sở dữ liệu Master ............................................ 117 Hình 4.2. Kết quả thêm một người dùng mới.............................................................. 117 Hình 4.3. Tạo thủ tục lưu trữ ....................................................................................... 123 Hình 4.4. Viết mã lệnh tạo thủ tục lưu trữ bằng MS ................................................... 123 Hình 4.5. Viết mã lệnh tạo thủ tục lưu trữ bằng T-SQL ............................................. 124 Hình 4.6. Kết quả tạo thủ tục lưu trữ ........................................................................... 124 Hình 4.7. Thực thi thủ tục lưu trữ bằng công cụ MS .................................................. 125 Hình 4.8. Nhập giá trị cho tham số nhập ..................................................................... 125 Hình 4.9. Xây dựng hàm vô hướng ............................................................................. 137 Hình 4.10. Xây dựng hàm trực tuyến .......................................................................... 137 Hình 4.11. Xây dựng hàm đa lệnh ............................................................................... 138 Hình 4.12. Kết quả tạo các hàm người dùng ............................................................... 139 Hình 5.1. Kết quả thực hiện hành động Insert ............................................................. 149 Hình 5.2. Kết quả thực hiện hành động Delete ........................................................... 150 Hình 5.3. Kết quả thực hiện hành động Update .......................................................... 151 Hình 5.4. Thứ tự các trường trong bảng Muaban ........................................................ 156 Hình 5.5. Thứ tự các trường trong bảng Thisinh ......................................................... 156 Hình 5.6. Tạo Trigger .................................................................................................. 179 Hình 5.7. Kết quả tạo Trigger ...................................................................................... 179 Hình 6.1. Sao lưu cơ sở dữ liệu ................................................................................... 183 Hình 6.2. Loại sao lưu cơ sở dữ liệu ........................................................................... 183 Hình 6.3. File sao lưu .................................................................................................. 184 Hình 6.4. Chọn đường dẫn lưu trữ file backup............................................................ 185 Hình 6.5. Chọn thư mục lưu file backup ..................................................................... 185 Hình 6.6. Thao tác phục hồi dữ liệu ............................................................................ 186 Hình 6.7. Chọn cơ sở dữ liệu nguồn cần khôi phục .................................................... 186 Hình 6.8. Khôi phục dữ liệu từ thiết bị lưu trữ ............................................................ 187

vii

Tập bài giảng SQL Server Hình 6.9. Bổ sung file backup ..................................................................................... 187 Hình 6.10. Chọn file backup để khôi phục .................................................................. 187 Hình 6.11. Chọn file backup ....................................................................................... 188 Hình 6.12. Thông báo khôi phục thành công ............................................................. 188 Hình 6.13. Chọn chức năng New Mainternance Plan ................................................. 189 Hình 6.13. Đặt tên kế hoạch ........................................................................................ 190 Hình 6.14. Khai báo cấu hình kế hoạch tạo bản sao ................................................... 190 Hình 6.15. Khai báo kế hoạch chi tiết ......................................................................... 190 Hình 6.16. Khai báo lịch trình thực hiện ..................................................................... 191 Hình 6.17. Chọn lịch trình sao lưu theo ngày ............................................................. 191 Hình 6.18. Chọn lịch trình sao lưu theo tuần .............................................................. 191 Hình 6.19. Chọn lịch trình sao lưu theo tháng ............................................................ 192 Hình 6.20. Giao diện kế hoạch thứ nhất ...................................................................... 192 Hình 6.21. Kết thúc khai báo chi tiết cho kế hoạch thứ nhất. ..................................... 192 Hình 6.22. Thêm nghiệp vụ vào kế hoạch sao lưu ...................................................... 193 Hình 6.23. Danh sách cơ sở dữ liệu ............................................................................ 194 Hình 6.24.Cấu hình tạo bản sao .................................................................................. 194 Hình 6.25. Lưu kế hoạch chi tiết ................................................................................. 194 Hình 6.26. Kế hoạch chi tiết ........................................................................................ 195 Hình 6.27. Thao tác sao chép cơ sở dữ liệu ................................................................ 195 Hình 6.28. Sao chép cơ sở dữ liệu ............................................................................... 196 Hình 6.29. Khai báo cơ sở dữ liệu nguồn .................................................................... 196 Hình 6.30. Khai báo cơ sở dữ liệu đích ....................................................................... 197 Hình 6.31. Phương pháp sao chép ............................................................................... 197 Hình 6.32. Chọn cơ sở dữ liệu sao chép ...................................................................... 198 Hình 6.33. Cấu hình cơ sở dữ liệu đích ....................................................................... 198 Hình 6.34. Cấu hình cho gói sao chép......................................................................... 199 Hình 6.35. Chọn chế độ thực thi ................................................................................. 199 Hình 6.36. Màn hình tóm tắt quá trình sao chép ......................................................... 200 Hình 6.37. Thông báo sao chép không thành công ..................................................... 200 Hình 6.38. Khởi động dịch vụ Agent .......................................................................... 201 Hình 7.1. Mô hình chế độ bảo mật trong SQL Server ................................................ 202 Hình 7.2. Đăng nhập bằng tài khoản hệ điều hành ..................................................... 203 Hình 7.3. Tài khoản người sử dụng trong SQL Server ............................................... 203 Hình 7.4. Đăng nhập bằng tài khoản SQL Server ....................................................... 204 Hình 7.5. Màn hình tạo tài khoản trong windows ....................................................... 205 Hình 7.6. Tạo tài khoản mới trong Windows .............................................................. 205

viii

Tập bài giảng SQL Server

Hình 7.7. Nhập thông số cho tài khoản trong Windows ............................................. 206 Hình 7.8. Kết quả tạo tài khoản trong Windows thành công ...................................... 206 Hình 7.9. Tạo login mới .............................................................................................. 207 Hình 7.10. Khai báo tên tài khoản trong Window ....................................................... 207 Hình 7.11. Danh sách login trong hệ thống ................................................................. 207 Hình 7.12. Chọn tài khoản của hệ điều hành ............................................................... 208 Hình 7.13. Tìm kiếm tài khoản .................................................................................... 208 Hình 7.14. Danh sách tài khoản của hệ điều hành ...................................................... 208 Hình 7.15. Màn hình nhập tên tài khoản .................................................................... 209 Hình 7.16. Khai báo tên tài khoản trong SQL Server ................................................. 209 Hình 7.17. Thay đổi thông số cho tài khoản ............................................................... 210 Hình 7.18. Chọn vai trò máy chủ ................................................................................ 210 Hình 7.19. Chọn cơ sở dữ liệu cho tài khoản .............................................................. 212 Hình 7.20. Tạo user mới cho cơ sở dữ liệu ................................................................. 213 Hình 7.21. Khai báo tài khoản cơ sở dữ liệu ............................................................... 213 Hình 7.22. Tìm tài khoản người dùng ......................................................................... 214 Hình 7.23. Chọn tên người dùng ................................................................................. 214 Hình 7.24. Tìm loại giản đồ ......................................................................................... 214 Hình 7.25. Chọn loại giản đồ ....................................................................................... 215 Hình 7.26. Gán quyền thao tác dữ liệu ........................................................................ 215 Hình 7.27. Chọn chế độ Login .................................................................................... 216 Hình 8.1. Mô hình ADO .............................................................................................. 218 Hình 8.2. Mô hình ADO.NET ..................................................................................... 219 Hình 8.3. Các lớp OleDb và SqlClient ........................................................................ 220 Hình 8.4. Mối liên hệ giữa lớp Command và các lớp khác ......................................... 223 Hình 8.5. Lớp SqlDataAdapter .................................................................................... 226 Hình 8.6. Form quản lý thông tin sinh viên ................................................................. 232 Hình 8.7. Cửa sổ tạo dự án .......................................................................................... 232 Hình 8.8. Form sắp xếp và tìm kiếm sinh viên ............................................................ 243 Hình 8.9. Tạo một form mới ........................................................................................ 244 Hình 8.10. Tạo View lớp ............................................................................................. 244 Hình 9.1. Tạo cơ sở dữ liệu ......................................................................................... 252 Hình 9.2. Xác định các thông số của cơ sở dữ liệu ..................................................... 252 Hình 9.3. Tạo bảng dữ liệu .......................................................................................... 253 Hình 9.4. Thiết kế bảng dữ liệu ................................................................................... 253 Hình 9.5. Lưu bảng dữ liệu .......................................................................................... 253 Hình 9.6. Tạo khóa chính ............................................................................................ 254

ix

Tập bài giảng SQL Server Hình 9.7. Tạo khóa ngoại ............................................................................................ 254 Hình 9.8. Xác định các thông số của khóa ngoại ........................................................ 254 Hình 9.9. Chọn trường cho khóa chính-khóa ngoại .................................................... 255 Hình 9.10. Tạo ràng buộc duy nhất ............................................................................. 255 Hình 9.11. Nhập tên cho ràng buộc duy nhất .............................................................. 256 Hình 9.12. Chọn trường làm ràng buộc duy nhất ........................................................ 256 Hình 9.13. Tạo ràng buộc kiểm tra .............................................................................. 257 Hình 9.14. Nhập tên cho ràng buộc kiểm tra .............................................................. 257 Hình 9.15. Nhập điều kiện cho ràng buộc kiểm tra .................................................... 257 Hình 9.16. Tạo ràng buộc mặc định ............................................................................ 258 Hình 9.17. Tạo kết nối giữa các bảng ......................................................................... 258 Hình 9.18. Chọn các bảng dữ liệu ............................................................................... 258 Hình 9.19. Tạo kết nối ................................................................................................. 259 Hình 9.20. Kiểm tra trường kết nối ............................................................................. 259 Hình 9.21. Xác nhận mối kết nối ................................................................................ 259 Hình 9.22. Lưu mối kết nối ......................................................................................... 260 Hình 9.23. Tạo chỉ mục ............................................................................................... 260 Hình 9.24. Chọn các thông số cho chỉ mục ................................................................. 260 Hình 9.25. Chọn trường làm chỉ mục .......................................................................... 261 Hình 9.26. Chọn chức năng Import ............................................................................. 261 Hình 9.27. Chọn dữ liệu nguồn ................................................................................... 262 Hình 9.28. Chọn dữ liệu đích ...................................................................................... 262 Hình 9.29. Chọn phương thức Import ........................................................................ 263 Hình 9.31. Thực thi và lưu trữ file đóng gói ............................................................... 264 Hình 9.32. Thực hiện Import ....................................................................................... 264 Hình 9.33. Tạo view .................................................................................................... 265 Hình 9.34. Chọn dữ liệu nguồn cho view ................................................................... 265 Hình 9.35. Thiết kế View ý 1 ...................................................................................... 265 Hình 9.36. Thiết kế View ý 2 ...................................................................................... 266 Hình 9.37. Thiết kế View ý 3 ...................................................................................... 267 Hình 9.38. Thiết kế View ý 4 ...................................................................................... 267 Hình 9.39. Thiết kế View ý 5 ...................................................................................... 268

x

Tập bài giảng SQL Server

LỜI NÓI ĐẦU

Microsoft SQL Server ra đời đã và đang chứng minh sức mạnh của nó trong kỷ nguyên công nghệ thông tin với nền kinh tế toàn cầu hóa. Chúng góp phần vào quá trình phát triển ứng dụng lưu trữ, xử lý, tích hợp lẫn báo cáo dữ liệu, giúp các nhà hoạch định chiến lược ra quyết định tốt nhất. Môn học SQL Server là môn học bắt buộc và SQL Server là một lựa chọn tốt cho các ứng dụng thương mại điện tử hay quản lý. Để giúp sinh viên các ngành thuộc lĩnh vực Công nghệ thông tin trường Đại học Sư phạm Kỹ thuật Nam Định học tốt hơn môn học này và vận dụng để quản lý cơ sở dữ liệu trong quá trình xây dựng và sử dụng các sản phẩm phần mềm, thì việc xuất bản “Tập bài giảng SQL Server” là rất cần thiết.

Tập bài giảng được chia làm 8 chương: Chương 1. Tổng quan về SQL Server Chương 2. Ngôn ngữ Transaction SQL (T-SQL) Chương 3. Quản lý cơ sở dữ liệu Chương 4. Thủ tục lưu trữ và hàm người dùng Chương 5. Quản lý Trigger Chương 6. Sao lưu và phục hồi dữ liệu Chương 7. Quản lý bảo mật và người dùng Chương 8. SQL Server và lập trình ứng dụng Mỗi chương trong tập bài giảng đều hệ thống hóa các kiến thức cơ bản, cần thiết. Tương ứng với mỗi nội dung kiến thức đều có các ví dụ minh họa cụ thể, gán với các ứng dụng thực tiễn. Đặc biệt, cuối tập bài giảng, tác giả đưa ra một số bài tập làm thêm để sinh viên vận dụng củng cố lại kiến thức và kỹ năng. Trong đó, bài tập đầu tiên được hướng dẫn giải chi tiết. Điều đó nhằm giúp sinh viên có thể tự học và làm các bài tập tương tự một các dễ dàng.

Với phần lý thuyết chi tiết, đầy đủ được trình bày một cách khoa học, logic và phần bài tập có hướng dẫn giải chi tiết, chúng tôi hy vọng rằng tập bài giảng này sẽ mang lại cho bạn đọc nhiều điều bổ ích.

Trong quá trình biên soạn, tập bài giảng không tránh khỏi những sai sót, rất mong đồng nghiệp và các em sinh viên góp ý kiến để tập bài giảng ngày càng được hoàn thiện hơn. Nhóm biên soạn

Nguyễn Văn Thẩm Vũ Thị Phương-Trần Thị Thuận

xi

Tập bài giảng SQL Server

Chƣơng 1 TỔNG QUAN VỀ SQL SERVER

1.1. Giới thiệu về SQL Server

Năm 1970, IBM đã khởi tạo ra ngôn ngữ máy tính cho các truy vấn trong cơ sở dữ liệu có tên là SEQUEL (Structured English Query Language). Năm 1970, IBM đã

khởi tạo ra ngôn ngữ máy tính cho các truy vấn trong cơ sở dữ liệu có tên là SEQUEL (Structured English Query Language). Sau một thời gian, ngôn ngữ này phát triển

không những chỉ thực hiện các truy vấn mà còn có thể xây dựng và quản trị cơ sở dữ

liệu. Sau đó, IBM đã phổ biến ngôn ngữ này một cách công khai và trên nhiều phạm vi

mà ngày nay bạn biết đến với tên là SQL. Năm 1985, IBM kết hợp với Microsoft để

phát triển một số hệ điều hành và các phần mềm hệ thống khác. Hệ điều hành đầu tiên có tên OS/2 được ra đời dựa trên hệ điều hành MS-DOS của Microsoft.

Ngày 16/12/1987, hệ điều hành OS/2 1.0 đã chính thức được phát hành. Nhưng

sau đó IBM đã đưa ra phiên bản mới của OS/2 gọi là OS/2 mở rộng (Extended) được

tích hợp thêm một phần cơ sở dữ liệu SQL của IBM (hệ quản trị cơ sở dữ liệu DB2).

Microsoft nhận thấy rằng nếu IBM có thể đưa ra giải pháp hoàn chỉnh cho OS/2 mở

rộng thì liệu có khách hàng nào sẽ mua sản phẩm OS/2 của Microsoft không ?

Vào thời điểm này, Microsoft chưa hề có một sản phẩm thuộc loại quản trị cơ

sở dữ liệu. Ngay sau đó, Microsoft đã quay sang kết hợp với công ty Sybase để cùng

hợp tác làm ra một sản phẩm thuộc loại hệ quản trị cơ sở dữ liệu (Database

Management System). Với sự hợp tác tốt đẹp, hai công ty này đã thành công cho ra

đời một sản phẩm thuộc loại cơ sở dữ liệu có tên rất khó nhớ là Ashton-Tate vào năm

1988, sản phẩm này hoạt động trên môi trường OS/2. Sau đó một thời gian, Sybase đã

phát triển sản phẩm này trên môi trường UNIX và đổi tên riêng là DataServer mà ngày nay còn có tên khác là Sybase Adaptive Server.

Microsoft quyết định không phát triển hệ điều hành OS/2 mà thay vào đó cho ra đời một hệ điều hành mạng máy tính có tên là Windows NT Server. Và thế là SQL Server chỉ hoạt động độc lập trên môi trường Windows NT Server mà thôi. Lần lượt

các phiên bản của Microsoft SQL Server đã ra đời sau sự kiện này từ 4.2. Sau đó được

nâng cấp thành 4.21, 6.0, 6.5, 7.0. Tuy nhiên, các phiên bản của SQL Server phổ biến hiện này trên thị trường là SQL Server 2000, 2005, 2008, và mới nhất là SQL Server 2012.

Microsoft SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ (Relation Database Management System - RDBMS), cung cấp cách tổ chức dữ liệu bằng

cách lưu chúng vào các bảng. Dữ liệu quan hệ được lưu trữ trong các bảng và các quan

hệ đó được định nghĩa giữa các bảng với nhau. Người dùng truy cập dữ liệu trên

1

Tập bài giảng SQL Server Server thông qua ứng dụng. Người quản trị CSDL truy cập Server trực tiếp để thực hiện các chức năng cấu hình, quản trị và thực hiện các thao tác bảo trì CSDL. Ngoài

ra, SQL Server là một CSDL có khả năng mở rộng, nghĩa là chúng có thể lưu một

lượng lớn dữ liệu và hỗ trợ tính năng cho phép nhiều người dùng truy cập dữ liệu đồng

thời.

1.2. Các mô hình sử dụng trong SQL Server

Hệ thống được thiết kế sử dụng SQL Server sẽ phụ thuộc vào số lượng người dùng truy cập cơ sở dữ liệu đồng thời và loại công việc được thực hiện. Các mô hình

có thể được sử dụng là: Client/Server, Destop, SOA.

1.2.1. Mô hình Client/Server

Hình 1.1. Mô hình Client/Server

Yếu tố cơ bản trong mô hình khách chủ là trong hệ thống phải có các máy tính

kết nối chung với nhau sử dụng một giao thức bất kỳ nhằm mục đích sử dụng các tài nguyên, dữ liệu của nhau. Hệ thống khách/chủ gồm 3 phần:

- Hệ thống phía Server: xử lý yêu cầu và phục vụ

- Hệ thống phía Client: nơi yêu cầu và nhận dữ liệu

- Hệ thống giao tiếp giữa Client và Server(Network) Tiến trình xử lý: Trong mô hình khách chủ, ngoài hệ thống mạng máy tính phải

có còn đòi hỏi việc tổ chức các xử lý bên dưới sao cho hiệu quả, đảm bảo các yêu cầu (request) từ các máy trạm phải được máy chủ phúc đáp (response) một cách nhanh chóng, không làm tắc nghẽn hệ thống. Khi thiết kế các ứng dụng theo mô hình khách chủ, người ta chia các xử lý ra làm 2 nhánh: nhánh máy trạm và nhánh máy chủ.

- Nhánh máy trạm (client side): Các ứng dụng sẽ thực hiện các công việc đọc và hiển thị dữ liệu hiện có bên trong cơ sở dữ liệu, tính toán dữ liệu đang hiển thị trên các màn hình ứng dụng, in dữ liệu ra. Các ngôn ngữ dùng để xây dựng ứng dụng là Delphi,

2

Tập bài giảng SQL Server

Visual Basic, C++, ASP, C#, …. Các ứng dụng này còn cho phép người dùng có thể thực hiện các thao tác xóa, thêm, sửa dữ liệu hiện có bên trong cơ sở dữ liệu bên nhánh

máy chủ. Các ứng dụng khi xây dựng nên tránh việc đọc toàn bộ dữ liệu của bảng

(Table) khi truy xuất dữ liệu từ máy chủ mà chỉ nên lấy về đúng các thong tin cần thiết

cho các xử lý. Việc này làm giảm đi lượng thông tin lưu thông trên mạng.

- Nhánh máy chủ (server side): Các xử lý được thực hiện trực tiếp trên máy chủ. Để đảm bảo việc bảo mật (security), những người dùng trên mạng phải được cấp phát quyền truy cập thì mới có thể truy xuất được các dữ liệu dùng chung. Việc cập nhật dữ

liệu cho phép đồng thời cùng lúc giữa những người dùng hiện hành trên mạng, ví dụ

như máy chủ cho phép cùng lúc cả hai người dùng có thể cập nhật thông tin của khách

hàng trong bảng khách hàng. Việc sao lưu dữ liệu (backup data) được tự động để đảm

bảo dữ liệu không bị mất trong các trường hợp xấu xảy ra.

1.2.2. Mô hình Desktop

Hình 1.2. Mô hình Desktop

SQL Server có thể được dùng như một cơ sở dữ liệu độc lập chạy trên máy tính

để bàn (Desktop) hoặc máy tính xách tay (Laptop), gọi chúng là mô hình Destop. Các

ứng dụng Client chạy trên cùng máy tính lưu phần mềm SQL Server và cơ sở dữ liệu

SQL Server. Trong hệ thống nay chỉ có một máy tính. Như vậy không có kế nối mạng

được thực hiện từ phía client tới server, client thực hiện kết nối cục bộ tới chính SQL Server cài đặt cục bộ.

Mô hình Desktop hữu ích trong trường hợp chỉ có một người dùng đơn hoặc một số ít người dùng chia sẻ máy tính truy cập cơ sở dữ liệu ở những thời điểm khác

nhau. Mô hình này thường dùng trong trường hợp cơ sở dữ liệu nhỏ.

3

Tập bài giảng SQL Server

1.2.3. Mô hình SOA

Hình 1.3. Mô hình OSA

Mô hình hướng dịch vụ (Service Oriented Architechture – gọi tắt là mô hình SOA)

là một khái niệm về kiến trúc hệ thống nhằm đem lại một cách thuận tiện nhất những chức

năng nghiệp vụ, hoặc là những quy trình ứng dụng, tới người sử dụng dưới dạng các dịch

vụ hoạt động trên môi trường mạng có khả năng chia sẻ và sử dụng lạị. Dịch vụ ở đây được

hiểu là những mô-đun nghiệp vụ hoặc chức năng ứng dụng với giao diện được thiết kế theo

quy định và được tương tác bằng cách gửi nhận thông điệp.

1.3. Các tính năng mới của SQL Server 2008

SQL Server 2008, phiên bản kế tiếp của Microsoft SQL Server, cung cấp một

nền tảng dữ liệu toàn diện, bảo mật hơn, đáng tin cậy hơn, dễ quản lý hơn và dễ nâng

cấp hơn cho các ứng dụng quan trọng của bạn, mà vẫn giúp nhà phát triển tạo ra những

ứng dụng mới có thể lưu trữ, sử dụng mọi loại dữ liệu trên mọi thiết bị và giúp mọi

người dùng thấu hiểu để quyết định. Các tính năng mới:

- Được tín nhiệm: Bảo vệ thông tin quý giá, đảm bảo nghiệp vụ liên tục, tiên

đoán được phản ứng.

- Hiệu suất cao: Để có thể tận dụng các cơ hội mới trong thế giới kinh doanh

phát triển nhanh ngày nay, các công ty cần có khả năng tạo và triển khai các giải pháp

hướng dữ liệu nhanh chóng. SQL Server 2008 sẽ giảm thời gian và chi phí để quản lý và phát triển các ứng dụng như quản lý theo chính sách, đơn giản hoá việc phát triển ứng dụng, lưu trữ mọi loại thông tin..

- Thông minh: SQL Server 2008 cung cấp một nền tảng toàn diện thông minh mà người dùng mong muốn chẳng hạn như tích hợp mọi dữ liệu, chuyển giao thông tin liên quan, mang lại khả năng thấu hiểu để hành động.

4

Tập bài giảng SQL Server

Hình 1.4. Đặc tính mới của SQL Server

1.4. Các phiên bản của SQL Server 2008:

Trước khi đi vào các thành phần của SQL Server 2008, ta xét các phiên bản của

SQL Server 2008. SQL Server 2008 được sử dụng rộng rãi cho nhiều đối tượng khác

nhau nên Microsoft cung cấp nhiều phiên bản khác nhau cho phù hợp với các yêu cầu

về chi phí, thời gian thực hiện, của các tổ chức, cá nhân.

Hầu hết các tổ chức đều chọn trong ba phiên bản SQL Server 2008

Enterprise Edition, SQL Server 2008 Standard Edition, và SQL Server 2008

Workgroup Edition. Các tổ chức chọn một trong ba phiên bản này với lý do là chỉ có

các phiên bản Enterprise, Standard, và Workgroup được cài đặt và sử dụng trong môi

trường server phục vụ cho hoạt động thực tế.

- Phiên bản phí bảo hiểm (Premium Editions): Datacenter, Parallel Data,

Warehouse

- Phiên bản cốt lõi (Core Editions): Enterprise, Standard.

Hình 1.5. Một số phiên bản của SQL Server

+ SQL Server 2008 Enterprise Edition (32-bit và 64-bit): Enterprise Edition được sử dụng trong các doanh nghiệp, tổ chức có các mức yêu cầu xử lý giao dịch trực tuyến trên diện rộng (online transaction processing - OLTP), khả năng phân tích dữ liệu phức tạp cao, hệ thống kho dữ liệu (data warehousing systems) và web sites. Enterprise Edition phù hợp cho các tổ chức lớn và các yêu cầu phức tạp.

5

Tập bài giảng SQL Server

+ SQL Server 2008 Standard Edition (32-bit và 64-bit): Standard Edition là phiên bản phục vụ cho việc quản trị và phân tích dữ liệu phù hợp cho các doanh nghiệp, tổ chức vừa và

nhỏ. Nó bao gồm các giải pháp cần thiết cho thương mại điện tử (e-commerce), kho dữ liệu

(data warehousing) và dòng doanh nghiệp (line-of-business).

- Phiên bản chuyên ngành (Specialized Editions): Workgroup, Developer,

Express, Web, Compact.

+ SQL Server 2008 Workgroup Edition (32-bit only): Workgroup Edition là giải pháp quản trị dữ liệu phù hợp cho các doanh nghiệp, tổ chức nhỏ chỉ cần một cơ

sở dữ liệu không giới hạn kích thước hoặc số người sử dụng. Workgroup Edition là lý

tưởng cho các mức cơ sở dữ liệu tin cậy, mạnh mẽ và dễ quản trị.

+ SQL Server 2008 Developer Edition (32-bit và 64-bit): Developer Edition có

tất cả các tính năng của phiên bản SQL Server 2008 Enterprise Edition, nhưng nó chỉ là phiên bản sử dụng cho phát triển và kiểm tra ứng dụng. Phiên bản này phù hợp cho

các cá nhân, tổ chức xây dựng và kiểm tra ứng dụng.

+ SQL Server 2008 Express Edition (32-bit only): SQL Server Express, dễ sử

dụng và quản trị cơ sở dữ liệu đơn giản. Được tích hợp với Microsoft Visual Studio

2008, SQL Server Express trở nên dẽ dàng để phát triển các ứng dụng dữ liệu giầu khả

năng, an toàn trong lưu trữ, và nhanh chóng triển khai. SQL Server Express là phiên bản

miễn phí, có thể dùng như một cơ sở dữ liệu máy khách hoặc cơ sở dữ liệu máy chủ đơn

giản. SQL Server Express là lựa chọn tốt cho những người dùng chỉ cần một phiên bản

SQL Server 2008 nhỏ gọn, dùng trên máy chủ có cấu hình thấp, những nhà phát triển

ứng dụng không chuyên hay những người yêu thích xây dựng các ứng dụng nhỏ.

+ SQL Server 2008 Web Edition: Nó được thiết kế cho các ứng dụng Web mà

không bị giới hạn bởi phiên bản Express. Nó rẻ hơn phiên bản Standard. Phiên bản Web không giới hạn dung lượng của cơ sở dữ liệu.

Hình 1.6. Phiên bản Web

+ SQL Server 2008 Compact Edition: Là cơ sở dữ liệu mặc định cho Microsoft WebMatrix mà nó là một ngăn xếp cho công nghệ Web, dễ dàng xây dựng và phát

triển các Websites trên nền tảng Window.

6

Tập bài giảng SQL Server

1.5. Cài đặt SQL Server

Trước khi cài đặt SQL Server

2008, ta cần phải đảm bảo ràng rằng

máy của bạn sẽ đáp ứng được các yêu cầu đối với SQL Server 2008. Có rất

nhiều các yêu cầu khác nhau về SQL

Server 2008 mà máy phải đáp ứng, nó

phụ thuộc vào phiên bản SQL Server ta đang cài đặt và nền tảng hệ điều

hành đang sử dụng. Trước khi cài đặt

SQL Server 2008, ta nên xem lại Hình 1.7. Phiên bản Compact trang web sau

đây để xác định các cài đặt máy đúng cho môi trường của bạn:

http://msdn.microsoft.com/en-us/library/ms143506.aspx Lần đầu tiên cho đĩa CD SQL Server 2008 vào ổ đĩa, nó sẽ tự động khởi động quá

trình thiết lập cho SQL Server 2008. Nếu cài đặt không bắt đầu bạn có thể tìm tập tin

“setup.exe” và chạy nó.

Các bƣớc cài đặt: Bước 1: Để cài đặt, ta phải chọn mục "I accept the license Terms" để chấp nhận

bản quyền của phiên bản cài đặt, sau đó chon nút Next.

Hình 1.8. Xác định bản quyền cài đặt

7

Tập bài giảng SQL Server Bước 2: Khi bắt đầu quá trình cài đặt nó sẽ kiểm tra máy tính để đảm bảo .Net Framework và một bản copy update của bộ cài đặt Windows đang ở trên máy tính.

Hình 1.9. Kiểm tra trước khi cài đặt Bước 3: Nếu quá trình này không xảy ra trên máy tính, nó sẽ yêu cầu thiết lập cài đặt trước khi cài đặt SQL Sever 2008. Khi bạn đã cài đặt đầy đủ thì máy sẽ yêu cầu khởi động lại trước khi

có thể tiến hành cài đặt SQL Server 2008. Một khi máy tính đã có tất cả các điều kiện thích hợp

thì nó sẽ tiến hành cài đặt. Để cài đặt, ta chọn "New Installation".

Hình 1.10. Các lựa chọn khi cài đặt Bước 4: Sau khi tất cả các file được cài đặt, một bản tóm tắt của quá trình thiết lập cài đặt sẽ

được đưa ra. Nếu tất cả các điều kiện thiết lập cần thiết có đủ, ta sẽ cho phép để tiến hành cài đặt, nếu không ta sẽ cần phải khắc phục những vấn đề trong báo cáo và chạy lại việc cài đặt thiết lập. Một lần nữa quá trình này đã thiết lập một đường link để ta có thể xem lại các chi tiết của việc cài đặt thiết lập. Ta nên xem lại các chi tiết trước khi tiến hành, để biết

chính xác về mỗi quy tắc cài đặt. Một khi đã sẵn sàng cài đặt ta nhấp vào nút "Next".

8

Tập bài giảng SQL Server

Hình 1.11. Kiểm tra các yêu cầu của máy tính trước khi cài đặt Bước 5: Cửa sổ màn hình hiển thị tính năng khác nhau của SQL Server 2008 mà ta có

thể cài đặt. Ở đây ta sẽ bấm vào các ô thích hợp cho các tính năng muốn cài đặt. Ngoài

ra, cũng trên màn hình này bạn có thể chọn thư mục chứa các file cài đặt này. Trong

trường hợp ví dụ này, cài đặt các tính năng được để trên ổ đĩa C. Sau khi tất cả các tính

năng được chọn, và bạn đã xác định vị trí nơi muốn các tính năng chia sẻ được cài đặt, bạn có thể sau đó nhấp vào nút "Next" để tiến hành.

Hình 1.12. Các tính năng cài đặt

9

Tập bài giảng SQL Server Bước 6: Trên cửa sổ tiếp theo ta chỉ rõ có hay không cài đặt default instance hoặc là một named instance, ta tự điền ID của riêng mình và thư mục gốc chứa cái đó. Trong

ví dụ này, cài đặt mặc định là “default instance” và định danh cho instance ID là

MSSQLSERVER. Trong phần thư mục gốc “instance root directory”, ta chỉ định một

địa điểm nằm trong ổ C. Tiến trình cài đặt sẽ tính toán dung lượng còn trống của ổ đĩa có đủ cho những đặc tính bạn chọn hay không. Quá trình sẽ báo cáo dung lượng trống cho mỗi ổ đĩa. Xem lại yêu cầu dung lượng trống của ổ đĩa. Nếu không đủ, ta cần phải chỉ định một địa điểm khác, lúc này có thể sử dụng nút “back” để quay trở lại và thay

đổi địa điểm cài đặt. Nếu đã thỏa mãn với dung lượng trống và địa chỉ, ta chọn vào nút

“Next”.

Hình 1.13. Cấu hình cài đặt Bước 7: Trên cửa sổ tiếp theo, ta có thể sử dụng thẻ "Server Accounts" để chị định tài khoản mà ta sẽ sử dụng để chạy services SQL Server 2008 khác và sử dụng thẻ "Collation" để chỉ định dãy hòa trộn mà ta muốn sử dụng. Trong trường hợp này, ta

chọn tài khoản giống nhau cho tất cả services của SQL Server. Bởi vậy có thể vào tài khoản đó nhiều lần với mỗi service hoặc có thể click vào "Use the same account for all SQL Server services" và chỉ nhập tài khoản và mật khẩu một lần duy nhất.

10

Tập bài giảng SQL Server

Hình 1.14. Cấu hình Server Bước 8: Trên màn hình tiếp theo, ta còn có thể chỉ định status mỗi service bạn muốn

trong lúc khởi động. Trên màn hình, bạn chỉ định các thông tin cấu hình của cơ sở dữ

liệu. Có 2 thẻ khác nhau để thực hiện: Account Provisioning, Data Directories. Ở trên ta có thể nhìn thấy tùy chọn cấu hình "Account Provisioning". Ở đây ta có thể chỉ định

những đặc tính bằng cách chỉ sử dụng cửa sổ xác thực hoặc ta muốn chạy chế độ hỗn

hợp để hỗ hợ SQL Server và cửa sổ xác thực thông tin đăng nhập. Nếu chọn "Mixed

Mode" sau đó ta sẽ cần điền mật khẩu cho tài khoản SA (không gì sai lầm hơn việc để

tài khoản SA trống). Bây giờ, ta còn có thể thêm một tùy chọn để thêm users mà ta

muốn thay thế trong “syadmin”. Ta phải đặt ít nhất một người sử dụng ở đây. Điều này

cho phép người sử dụng có thể login vào SQL Server 2008 sau khi cài đặt hoàn thành.

Ta làm điều đó bằng cách sử dụng nút “Add” để thêm chúng trong màn hình bên trên. Ngoài ra, ta còn có thể sử dụng nút “Add Current User” để thêm use trong quản trị hệ thống. Sau đó, ta chọn nút Next.

11

Tập bài giảng SQL Server

Hình 1.15. Cấu hình Database Engine

Bước 9: Chọn mục "Install the Native mode default configuration". Chọn nút Next.

Hình 1.16. Cấu hình dịch vụ Report Bước 10: Tại cửa sổ "Errors and Usage Reporting", xác định nơi ta có thể gửi lỗi và

thông tin về tính năng sử dụng cho Microsoft. Một khi đã quyết định báo cáo tới Microsoft sẽ có nút “Next” khác để click để chuyển sang bước tiếp theo của quá trình cài đặt, đó là tất cả xác minh của quy định cài đặt.

12

Tập bài giảng SQL Server

Hình 1.17. Xác định phản hồi Bước 11: Tại cửa sổ cài đặt cuối, ta có được đánh giá cuối cùng về tùy chọn cài đặt mà ta đã

lựa chọn. Nếu có một vài thứ muốn thay đổi, ta có thể sử dụng nút “Back” để thay đổi chúng.

Một khi đã hài lòng với cấu hình cài đặt, ta chọn vào nút “install”. Máy sẽ bắt đầu tiến trình cài

đặt và cài đặt các thành phần mà ta đã lựa chọn ở trong địa điểm ta đã chỉ định.

Hình 1.18. Các thông số lựa chọn khi cài đặt.

13

Tập bài giảng SQL Server

Khi quá trình cài đặt kết thúc, cửa sổ sau đây sẽ hiện ra:

Hình 1.19. Thực hiện cài đặt

Ở đây, ta có thể thấy tất cả các thành phần đã chọn vừa được cài đặt thành

công. Khi click vào nút “Next”, màn hình “Close” được hiển thị, ta có thể click vào

nút “close” để kết thúc quá trình cài đặt SQL Server 2008.

Kết luận: Ta có thể thấy có nhiều lựa chọn khác nhau để cấu hình SQL Server

2008. Để cài đặt thành công, ta nên lên kế hoạch trước cho các thành phần của SQL

Server trên các ổ đĩa khác nhau và những tài khoản bạn có hoặc những tài khoản muốn

sử dụng cho các tính năng khác nhau của SQL Server. Điều này sẽ giúp ta thành công

trong việc cấu hình SQL Server theo cách mình mong muốn trong lần cài đặt SQL

Server 2008 lần đầu tiên.

1.6. Các thành phần SQL Server

1.6.1. Thành phần Server

- SQL Server Database: Cỗ máy cơ sở dữ liệu bao gồm Database Engine, lõi

dịch vụ cho việc lưu trữ, xử lý và bảo mật dữ liệu, sao lưu và đồng bộ (Replication), tìm kiếm toàn văn (Full-Text Search), và các công cụ cho việc quản trị dữ liệu quan hệ và XML.

- Analysis Services: bao gồm các công cụ cho việc tạo và quản lý tiến trình phân tích trực tuyến (online analytical processing - OLAP) và các ứng dụng khai thác dữ liệu.

14

Tập bài giảng SQL Server

- SQL Server Agent: Dịch vụ này hỗ trợ lập các chương trình, thực thi tác vụ, cảnh báo, thông báo và kế hoạch bảo trì cơ sở dữ liệu. Nó cho phép ta thực hiện tự

động hóa các tác vụ bảo trì cơ sở dữ liệu.

- Distributed Transaction Coordinator: Là trình quản lý giao dịch cung cấp các

khả năng bao gồm nhiều nguồn dữ liệu khác nhau kể cả các CSDL từ xa trong các giao dịch ứng dụng.

- Reporting Services: Bao gồm các thành phần server và client cho việc tạo, quản lý và triển khai các báo cáo. Reporting Services cũng là nền tảng cho việc phát

triển và xây dựng các ứng dụng báo cáo.

- Notification Services: Dịch vụ thông báo Notification Services là nền tảng

cho sự phát triển và triển khai các ứng dụng tạo và gửi thông báo. Notification

Services có thể gửi thông báo theo địch thời đến hàng ngàn người đăng ký sử dụng nhiều loại thiết bị khác nhau.

- Integration Service: Là một tập hợp các công cụ đồ họa và các đối tượng

lập trình cho việc di chuyển, sao chép và chuyển đổi dữ liệu.

1.6.2. Thành phần Client

Connectivity Components Là các thành phần cho việc truyền thông giữa

clients và servers, và các thư viện mạng như DB-Library, ODBC, and OLE DB.

1.6.3. Các công cụ đồ họa

Các công cụ giao diện đồ họa giúp cho việc truy xuất và quản trị SQL Server

được thay đổi khá nhiều so với các phiên bản trước đó.

Hình 1.20. Các công cụ đồ họa

15

Tập bài giảng SQL Server 1.7. Quản lý các dịch vụ SQL server

1.7.1. Dịch vụ SQL Server Configuration Manager

Configurations Tools: Cung cấp các quản trị cấu hình cơ sở cho các dịch vụ

SQL Server (SQL Server services), các giao thức server (server protocols), các giao

thức client (client protocols) và các bí danh client (client aliases).

Khởi động hoặc dừng các dịch vụ SQL Server sử dụng SQL Server

Configuration Manager ta thực hiện theo các bước sau:

Bước 1: Vào Start/Programs/Microsoft SQL Server 2008/Configuration

Tools/SQL Server Configuration Manager. Xuất hiện cửa sổ SQL Server

Configuration Manager. Chọn mục SQL Server Services.

Hình 1.21. Cửa sổ Configuration Manager

Bước 2: Trong khu vực chi tiết bên phải, chọn chuột phải lên thể hiện của

SQL Server mà ta muốn khởi chạy hoặc dừng.

- Start: Khởi chạy thể hiện của SQL Server

- Stop: Dừng hoạt động của thể hiện SQL Server.

- Pause: Tạm dừng hoạt động của thể hiện SQL Server

- Restart: Khởi động lại thể hiện của SQL Server

1.7.2. Sử dụng SQL Server Management Studio

SQL Server Management Studio: SQL Server Management Studio (SSMS), là công cụ mới trên Microsoft SQL Server 2008, nó là một môi trường được tích hợp cho

việc truy xuất, cấu hình, quản trị và phát triển tất cả các thành phần của SQL Server. SSMS kết hợp các tính năng của Enterprise Manager, Query Analyzer, và Analysis Manager, được bao hàm trong các phiên bản trước của SQL Server, thành một môi trường đơn mà cung cấp truy xuất SQL Server để phát triển và quản trị tất cả các mức

kỹ năng trên. Microsoft SQL Server Management Studio bao gồm các tính năng tổng quát sau:

- Cung cấp hầu hết các tác vụ quản trị cho SQL Server 2008 và SQL Server 2005.

16

Tập bài giảng SQL Server

- Là môi trường đơn, tích hợp cho việc quản trị và trao quyền SQL Server

Database Engine.

- Các hộp thoại mới cho việc quản lý các đối tượng trong SQL Server Database

Engine, Analysis Services, Reporting Services, Notification Services, và SQL Server

Mobile, cho phép ta thực thi các hành động ngay lập tức, gửi chúng tới Code Editor, hoặc tạo tập lệnh cho lần thực thi tiếp theo.

- Các hộp thoại cho phép truy cập đến nhiều điều khiển trong khi hộp thoại đó

đang được mở.

- Lập lịch cho phép ta thực thi các hành động của các hộp thoại quản trị.

- Export và import đăng ký server SQL Server Management Studio từ một môi

trường Management Studio này đến môi trường khác.

- Save hoặc in file XML Showplan hoặc Deadlock files được sinh bởi SQL

Server Profiler, xem lại, hoặc gửi chúng tới administrators để phân tích.v.v…

1) Các bước đăng nhập vào SQL Server Management Studio

Bước 1: Start/ Programs (All Program)/Microsoft SQL Server 2008/SQL

Server Management Studio.

Hình 1.22. Đăng nhập vào SQL Server Management Studio

Bước 2: Đăng nhập hệ thống - Chọn Database Engine để kết nối đến cỗ máy cơ sở dữ liệu tại Server type. - Chọn hoặc nhập tên server tại mục Server name. - Chọn chế độ đăng nhập tại mục Authentication: + Windows Authentication là chế độ đăng nhập bằng tài khoản của Windows. + SQL Server Authentication là chế độ đăng nhập bằng tài khoản trong SQL

Server. Khi đó, phải cung câp thông tin: Login: Nhập tên đăng nhập

17

Tập bài giảng SQL Server

Password: Mật khẩu của tên đăng nhập Remember password: Tùy chọn được chọn để là đăng nhập sau không

phải đánh mật khẩu.

Hình 1.23. Cửa sổ đăng nhập

Sau hộp thoại “Connect to Server ”cho vào cửa sổ SQL Server Management

Studio.

Hình 1.24. Cửa sổ SQL Server Management Studio.

1.8. Giới thiệu về SQL server 2012

Nền tảng dữ liệu thế hệ kế tiếp của Microsoft SQL Server 2012 là sản phẩm cơ

sở dữ liệu mớ i nhất củ a Microsoft mang đến những cải tiến vươ ̣t bâ ̣c về hiê ̣u năng và khả năng tương tác với các loại dữ liệu phi quan hệ , sẽ giúp người dùng quản lý “dữ

liệu bất kì, theo kích thước bất kỳ và tại bất kì đâu”. Microsoft SQL Server 2012 sẽ giúp giải quyết các thách thức liên quan đến sự gia tăng khối lượng dữ liệu bằng cách

chuyển các dữ liệu này thành các tầm nhìn mang tính quyết định nhanh chóng. Ngoài

18

Tập bài giảng SQL Server

tính năng giúp người dùng quản lý bất kì dữ liệu nào, với bất kì kích thước nào, tại cả cơ sở và trên điện toán đám mây, Microsoft SQL Server 2012 còn cho phép lập kế

hoạch phát hành dịch vụ dựa trên Apache Hadoop dành cho Windows Azure. Khi sử

dụng SQL Server 2012 người dùng sẽ được hưởng lợi ích từ hệ đối tác phong phú

hàng đầu cả trong lĩnh vực phần cứng và phần mềm, giúp tạo ra những giải pháp tốt nhất cho những nhu cầu quản lý dữ liệu. Microsoft SQL Server 2012 cũng đảm bảo cho các tác vụ quan trọng luôn được bảo mật, thời gian hệ thống hoạt động nhiều hơn, các tính năng bảo mật được tăng cường kèm khả năng đột phá trong cung cấp thông tin

chuyên sâu. Nền tảng dữ liệu Microsoft SQL Server 2012 được ghi nhận là đem đến

hiệu năng hoạt động nhanh đáng ngạc nhiên. Các tính năng mới của SQL Server 2012:

- Tính năng SQL Server AlwaysOn và đáp ứng 9s

- Hiệu suất nhanh đáng kinh ngạc nhờ công nghệ bộ nhớ trong xVelocity - Power View và PowerPivot và đột phá khai thác dữ liệu nhanh

- Dữ liệu thống nhất và đáng tin cậy nhờ BI Semantic Model và Data Quality

Services

- Chỉ một lần viết ứng dụng, chạy được ở bất cứ đâu với các công cụ dữ liệu

của SQL Server.

- Quy mô theo yêu cầu từ các thiết bị trung tâm dữ liệu cho tới điện toán đám

mây.

- Hỗ trợ điện toán đám mây, xử lý và đáp ứng nhanh, kế thừa và tái sử dụng các

ứng dụng dễ dàng.

Hình 1.25. SQL Server 2012

19

Tập bài giảng SQL Server a) Giải pháp AlwaysOn Availability Group:

Đây là giải pháp thay thế rất đáng giá cho hai giải pháp Database Mirroring và

Log Shipping ở những phiên bản SQL Server trước đây. AlwaysOn Availability Group

cung cấp một giải pháp hợp nhất trong việc triển khai cả hai giải pháp HA (High

Availability) và DR (Disaster Recovery). Có hai mô hình có thể lựa chọn triển khai:

- AlwaysOn Availability Group cho cả local HA và site-to-site DR - Kết hợp AlwaysOn Availability Group cho cả local HA và Failover Cluster

Instance (FCI) cho DR

b) Một số cải tiến về bảo mật:

- Default Schema for Windows Group

Ở phiên bản SQL Server 2008 R2, trong các Instance, người quản trị có thể tạo

một Login sử dụng chung cho một Windows Group. Khi đó mỗi Domain User trong nhóm đó có thể đăng nhập vào Instance đó mà không cần phải tạo từng đăng nhập

riêng cho từng người sử dụng. Việc này đã giúp cho người quản trị tiết kiệm được khá

nhiều thời gian. Tuy nhiên, vẫn còn vấn đề tồn tại, đó là ngay khi người dùng đó đăng

nhập lần đầu tiên vào và truy cập đến cơ sở dữ liệu (để truy vấn dữ liệu, chẳng hạn),

một người dùng và một giản đồ tương ứng sẽ được tự động tạo trong cơ sở dữ liệu đó.

Như vậy, cứ mỗi người dùng lại có một giản đồ khác nhau. Đây chính là một hạn chế

gây ra nhiều khó khăn trong việc quản trị.

Để khắc phục, phiên bản SQL Server 2012 cung cấp cho người quản trị khả

năng gán Default Schema cho một nhóm. Khi đó tất cả người dùng trong nhóm đều sử

dụng chung, một cách ngầm định (implicit), một giản đồ duy nhất.

- User-Defined Server Roles

Đây là tính năng quản trị được những người quản trị yêu cầu nhiều nhất. Tính năng này cho phép tạo mới cũng như tùy biến các Server Roles. Như vậy, thay vì chỉ

có thể sử dụng các Role có sẵn ở cấp server (fixed-server roles) như ở các phiên bản

SQL Server trước đây, người quản trị có thể tạo thêm các User-Defined Server Roles mới phù hợp với yêu cầu quản trị hơn.

- Contained Databases: Cung cấp khả năng lưu trữ thông tin chứng thực

(credential information) của các người dùng theo trong cơ sở dữ liệu thay vì lưu trong

cơ sở dữ liệu chủ như trước đây. Khả năng này giúp cho cơ sở dữ liệu ít phụ thuộc vào các cơ sở dữ liệu hệ thống hơn. Điều này đồng nghĩa với việc tính bảo mật trong cơ sở

dữ liệu được tăng lên và khả năng triển khai các ứng dụng linh hoạt hơn. Sẽ có 2 mức

lựa chọn cho một Contained Database: Partial và Full. Tuy nhiên, nhiều khả năng tính năng này ở phiên bản SQL Server 2012 sẽ chỉ hỗ trợ ở mức Partial. (và mức Full ở

những phiên bản tiếp theo)

20

Tập bài giảng SQL Server

- Crypto Enchancement: Nhiều thuật toán mã hóa mới cũng như AES256, SHA2 (256 và 512), … được hỗ trợ giúp cho việc mã hóa dữ liệu trong SQL Server

2012 tốt hơn bao hết.

- Audit Enhancement: Các tính năng về giám sát cũng được cải tiến rất nhiều

trong SQL Server 2012, có thể kể ra một số tính năng như: User-defined Audit cho phép các ứng dụng có thể ghi lại log với những thông tin mong muốn theo cơ chế giám sát của SQL Server; Filtering Audit giúp lọc những thông tin mong muốn sẽ ghi xuống log theo những điều kiện được định nghĩa trước; … Và đặc biệt là các

tính năng về Audit sẽ được hỗ trợ trên tất cả các bản (edition) SQL Server 2012

khác nhau.

c) Khi cài đặt SQL Server 2012

Yêu cầu Cả 2 phiên bản x86 và x64, MS đều khuyến cáo dù ng hê ̣ thống file NTFS , ta phải cài PowerShell 2.0 (đây là công cu ̣ command line giám sát SQL Server rất tốt ), .NET 3.5 SP1 và .NET 4.0. Yêu cầu phần cứ ng: - Các HĐH được hỗ trợ : Server 2008 R2 SP1, Windows 7 SP1, Server 2008

SP2, và Vista SP2. - Bô ̣ xử lý: + Tối thiểu cho hê ̣ thống x 64: AMD Opteron, AMD Athlon 64, Intel Xeon with

Intel EM64T, Intel Pentium IV with EM64T. Tốc đô ̣ bô ̣ xử lý: 1.4 GHz. + Tối thiê ̣u cho hê ̣ thống x 86: Pentium III hoă ̣c cao hơn . Tốc đô ̣ bô ̣ xử l ý: 1.0

GHz.

- Bô ̣ nhớ : tối thiểu 1 GB. SQL Server 2012 Express - Các HĐH được hỗ trợ : Server 2008 R2 SP1, Server 2008 SP2, Windows 7

SP1, và Vista SP2. - Bô ̣ xử lý: + Tối thiểu cho hê ̣ thống x 64: AMD Opteron, AMD Athlon 64, Intel Xeon with

Intel EM64T, Intel Pentium IV with EM64T. Tốc đô ̣ bô ̣ xử lý: 1.4 GHz.

+ Tối thiê ̣u cho hê ̣ thống x 86: Pentium III hoă ̣c cao hơn . Tốc đô ̣ bô ̣ xử lý : 1.0

GHz.

- Bô ̣ nhớ : tối thiểu 512 MB: WOW64 (Windows x86 trên Windows x64) là một phần củ a phiê n bản x 86 của HĐH Windows cho phép ứng dụng x 86 chạy trên x 64 ở chế đô ̣ x 86. Các ứng dụng ở chế độ x 86 hoă ̣c đô ̣ng ngay cả dướ i HĐH x 64. WOW64 không đươ ̣c hỗ trơ ̣ càI failover cluster.

21

Tập bài giảng SQL Server

Trên các HĐH x 64, SQL Server x86 đươ ̣c hỗ trơ ̣. Ta có thể tải về bô ̣ cài đă ̣t từ

địa chỉ sau: http://www.microsoft.com/sqlserver/en/us/get-sql-server.aspx

d) Một số tính năng chính hỗ trợ giải quyết các vấn đề về chất lượng dữ liệu:

- Data Cleansing: Hỗ trợ điều chỉnh, xóa bỏ hoặc bổ sung thêm dữ liệu sai hoặc

không hoàn chỉnh.

- Matching: Hỗ trợ cơ chế xác định các trùng lặp ngữ nghĩa trong các tiến trình xử lý dựa trên các bộ luật, cho phép xác định và cấu thành nên các đặc trưng đối chiếu tương đồng và thực thi loại bỏ trùng lắp.

- Reference Data Services: đánh giá chất lượng dữ liệu với các dịch vụ dữ liệu

tham chiếu từ các đơn vị cung cấp. Một số đơn vị cung cấp dịch vụ dữ liệu tiêu biểu

như Windows Azure Marketplace Data Market.

- Profiling: Quá trình phân tích dữ liệu nguồn nhằm cung cấp tính xuyên suốt của chất lượng dữ liệu tại mọi giai đoạn trong quá trình khám phá tri thức, đối chiếu tương

đồng và các tiến trình làm sạch dữ liệu.

- Monitoring: giám sát, theo dõi và xác định trạng thái của các tác vụ đảm bảo chất

lượng dữ liệu. Quá trình giám sát đảm bảo các tiến trình xử lý dữ liệu vận hành đúng

theo mô hình đã được thiết kế.

- Knowledge Base: DQS là giải pháp hướng tri thức, phân tích dữ liệu dựa trên hệ

thống tri thức. Cho phép xây dựng các tiến trình đảm bảo chất lượng dữ liệu, tiếp tục

nâng cao tri thức trong hệ thống dữ liệu.

22

Tập bài giảng SQL Server

Chƣơng 2 NGÔN NGỮ TRANSACTION SQL (T-SQL)

2.1. Ngôn ngữ T-SQL

2.1.1. Giới thiệu phát biểu T-SQL

SQL, viết tắt của Structured Query Language (ngôn ngữ hỏi có cấu

trúc), là công cụ sử dụng để tổ chức, quản lý và truy xuất dữ liệu được lưu trữ trong các cơ sở dữ liệu. SQL là một hệ thống ngôn ngữ bao gồm tập các câu lệnh sử dụng để

tương tác với cơ sở dữ liệu quan hệ. Khả năng của SQL vượt xa so với một công cụ

truy xuất dữ liệu, mặc dù đây là mục đích ban đầu khi SQL được xây dựng nên và truy

xuất dữ liệu vẫn còn là một trong những chức năng quan trọng của nó. SQL được sử

dụng để điều khiển tất cả các chức năng mà một hệ quản trị cơ sở dữ liệu cung cấp cho người dùng bao gồm:

- Định nghĩa dữ liệu: SQL cung cấp khả năng định nghĩa các cơ sở dữ liệu, các

cấu trúc lưu trữ và tổ chức dữ liệu cũng như mối quan hệ giữa các thành phần dữ liệu.

- Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực hiện

các thao tác truy xuất, bổ sung, cập nhật và loại bỏ dữ liệu trong các cơ sở dữ liệu.

- Điều khiển truy cập: SQL có thể được sử dụng để cấp phát và kiểm soát các

thao tác của người sử dụng trên dữ liệu, đảm bảo sự an toàn cho cơ sở dữ liệu.

- Đảm bảo toàn vẹn dữ liệu: SQL định nghĩa các ràng buộc toàn vẹn trong cơ sở

dữ liệu nhờ đó đảm bảo tính hợp lệ và chính xác của dữ liệu trước các thao tác cập

nhật cũng như các lỗi của hệ thống.

Như vậy, có thể nói rằng SQL là một ngôn ngữ hoàn thiện được sử dụng trong

các hệ thống cơ sở dữ liệu và là một thành phần không thể thiếu trong các hệ quản trị

cơ sở dữ liệu. Mặc dù SQL không phải là một ngôn ngữ lập trình như C, C++, Java,...

song các câu lệnh mà SQL cung cấp có thể được nhúng vào trong các ngôn ngữ lập

trình nhằm xây dựng các ứng dụng tương tác với cơ sở dữ liệu. Khác với các ngôn ngữ lập trình quen thuộc như C, C++, Java,... SQL là ngôn ngữ có tính khai báo. Với SQL,

người dùng chỉ cần mô tả các yêu cầu cần phải thực hiện trên cơ sở dữ liệu mà không cần phải chỉ ra cách thức thực hiện các yêu cầu như thế nào. Chính vì vậy, SQL là

ngôn ngữ dễ tiếp cận và dễ sử dụng.

Bản thân SQL không phải là một hệ quản trị cơ sở dữ liệu, nó không thể tồn tại

độc lập. SQL thực sự là một phần của hệ quản trị cơ sở dữ liệu, nó xuất hiện trong các

hệ quản trị cơ sở dữ liệu với vai trò ngôn ngữ và là công cụ giao tiếp giữa người sử dụng và hệ quản trị cơ sở dữ liệu. Trong hầu hết các hệ quản trị cơ sở dữ liệu quan hệ,

SQL có những vai trò như sau:

23

Tập bài giảng SQL Server

- SQL là ngôn ngữ hỏi có tính tương tác: Người sử dụng có thể dễ dàng thông qua các trình tiện ích để gửi các yêu cầu dưới dạng các câu lệnh SQL đến cơ sở dữ liệu

và nhận kết quả trả về từ cơ sở dữ liệu.

- SQL là ngôn ngữ lập trình cơ sở dữ liệu: Các lập trình viên có thể nhúng các

câu lệnh SQL vào trong các ngôn ngữ lập trình để xây dựng nên các chương trình ứng dụng giao tiếp với cơ sở dữ liệu.

- SQL là ngôn ngữ quản trị cơ sở dữ liệu: Thông qua SQL, người quản trị cơ sở dữ liệu có thể quản lý được cơ sở dữ liệu, định nghĩa các cấu trúc lưu trữ dữ liệu, điều

khiển truy cập cơ sở dữ liệu,...

- SQL là ngôn ngữ cho các hệ thống khách/chủ (client/server) : Trong các hệ

thống cơ sở dữ liệu khách/chủ, SQL được sử dụng như là công cụ để giao tiếp giữa các

trình ứng dụng phía máy khách với máy chủ cơ sở dữ liệu.

- SQL là ngôn ngữ truy cập dữ liệu trên Internet: Cho đến nay, hầu hết các máy

chủ Web cũng như các máy chủ trên Internet sử dụng SQL với vai trò là ngôn ngữ để

tương tác với dữ liệu trong các cơ sở dữ liệu.

- SQL là ngôn ngữ cơ sở dữ liệu phân tán: Đối với các hệ quản trị cơ sở dữ liệu

phân tán, mỗi một hệ thống sử dụng SQL để giao tiếp với các hệ thống khác trên

mạng, gửi và nhận các yêu cầu truy xuất dữ liệu với nhau.

- SQL là ngôn ngữ sử dụng cho các cổng giao tiếp cơ sở dữ liệu: Trong một hệ

thống mạng máy tính với nhiều hệ quản trị cơ sở dữ liệu khác nhau, SQL thường được

sử dụng như là một chuẩn ngôn ngữ để giao tiếp giữa các hệ quản trị cơ sở dữ liệu.

Transact-SQL là ngôn ngữ SQL mở rộng dựa trên SQL chuẩn của ISO

(International Organization for Standardization) và ANSI (American National

Standards Institute) được sử dụng trong SQL Server khác với P -SQL (Procedural- SQL) dùng trong Oracle. SQL chuẩn bao gồm khoảng 40 câu lệnh. Trong các hệ quản

trị cơ sở dữ liệu khác nhau, mặc dù các câu lệnh đều có cùng dạng và cùng mục đích

sử dụng song mỗi một hệ quản trị cơ sở dữ liệu có thể có một số thay đổi nào đó. Điều này đôi khi dẫn đến cú pháp chi tiết của các câu lệnh có thể sẽ khác nhau trong các hệ quản trị cơ sở dữ liệu khác nhau.

T-SQL được chia làm 3 nhóm:

- Ngôn ngữ định nghĩa dữ liệu (Data Definition Language-DDL). - Ngôn ngữ thao tác dữ liệu (Data manipulation language-DML).

- Ngôn ngữ điều khiển dữ liệu (Data Control Language-DCL).

2.1.2. Cú pháp của T-SQL

Các đối tượng trong cơ sở dữ liệu dựa trên SQL (table, view, index,

storedprocedure…) được xác định thông qua tên của đối tượng (hay còn gọi là

24

Tập bài giảng SQL Server

identifier). Tên của các đối tượng là duy nhất trong mỗi cơ sở dữ liệu. Tên được sử dụng nhiều nhất trong các truy vấn SQL và được xem là nền tảng trong cơ sở dữ liệu

quan hệ là tên bảng và tên trường. Có hai loại Identifiers một loại thông thường

(Regular Identifier) và một loại gọi là Delimited Identifier, loại này cần có dấu "" hay

dấu [] để ngăn cách. Loại Delimited được dùng đối với các chữ trùng với từ khóa của SQL Server (reserved keyword) hay các chữ có khoảng trống.

Ví dụ 1: Select *

From Thisinh

Where Thisinh.SBD = „TS001‟

Trong các cơ sở dữ liệu lớn với nhiều người sử dụng, khi ta chỉ định tên của

một bảng nào đó trong câu lệnh SQL, hệ quản trị cơ sở dữ liệu hiểu đó là tên của bảng do ta sở hữu (tức là bảng do ta tạo ra). Thông thường, trong các hệ quản trị cơ sở dữ

liệu này cho phép những người dùng khác nhau tạo ra những bảng trùng tên với nhau

mà không gây ra xung đột về tên. Nếu trong một câu lệnh SQL ta cần chỉ đến một

bảng do một người dùng khác sở hữu (hiển nhiên là phải được phép) thì tên của bảng

phải được viết sau tên của người sở hữu và phân cách với tên người sở hữu bởi dấu

chấm:

tên_người_sở_hữu.tên_bảng

Một số đối tượng cơ sở dữ liệu khác (như khung nhìn, thủ tục, hàm), việc sử

dụng tên cũng tương tự như đối với bảng. Ta có thể sử dụng tên trường một cách bình

thường trong các câu lệnh SQL bằng cách chỉ cần chỉ định tên của trường trong bảng.

Tuy nhiên, nếu trong câu lệnh có liên quan đến hai trường trở lên có cùng tên trong các

bảng khác nhau thì bắt buộc phải chỉ định thêm tên bảng trước tên trường; tên bảng và tên trường được phân cách nhau bởi dấu chấm.

Ví dụ 2: Đưa ra thông tin những thí sinh dự thi ngành „CNTT‟ thì câu truy vấn

như sau:

SELECT sbd, hoten, tenn FROM thisinh, Nganh

where thisinh.man=Nganh.man and tenn='CNTT'

2.1.3. Lập trình T-SQL

1) Định nghĩa và khai báo biến (Variable)

Định nghĩa biến Biến trong T-SQL cũng có chức năng tương tự như trong các ngôn ngữ lập trình khác nghĩa là cần khai báo trước loại dữ liệu trước khi sử dụng. Biến là một đối

tượng để lưu trữ một giá trị dữ liệu. Dữ liệu có thể được truyền đến câu lệnh SQL bằng

25

Tập bài giảng SQL Server cách sử dụng tên biến. Tên biến cục bộ phải khai báo bắt đầu bằng ký hiệu @. SQL Server hỗ trợ hai loại biến trong T-SQL: Toàn cục và cục bộ.

- Biến cục bộ: Trong Transact-SQL, biến cục bộ được khai báo và sử dụng tạm

thời khi thực thi câu lệnh SQL

Cú pháp:

DECLARE { @local_variable [AS] data_type

}

Trong đó :

+ @local_variable: tên biến cục bộ, phải bắt đầu bằng ký hiệu @,

+ data_type: kiểu dữ liệu hệ thống hoặc kiểu dữ liệu người dùng. Ví dụ dưới đây khai báo một biến có tên @sots thông qua từ khóa declare. Biến

này lưu số thí sinh đăng kí dự thi được đếm được thông qua hàm count. Sau đó in ra

giá trị của biến.

declare @sots int

select @sots = count(*)

from thisinh

print @sots

- Biến toàn cục: Biến toàn cục là biến có sẵn và hệ thống quản lý, biến toàn cục

trong SQL Server được đặt tên bắt đầu bởi hai ký hiệu @.

Cú pháp:

@@global_variable

Trong đó: global_variable là tên biến toàn cục. Danh sách các biến cục bộ (Global variables)

STT Tên biến Ý nghĩa

@@CONNECTIONS 1 Số lượng các kết nối đến Server kể từ kết nối cuối cùng được bắt đầu

@@CPU_BUSY 2 Số lượng nghìn trên giây hệ thống đã được xử lý khi SQL Server được bắt đầu

@@CURSOR_ROWS 3 Số lượng các bản ghi được trỏ đến gần đây nhất

4 @@ERROR . Số lượng lỗi của T-SQL gần nhất

5 @@FETCH_STATUS 0 nếu đọc mẩu tin hợp lệ, -1 nếu có một lỗi

6 @@IDENTITY Cung cấp giá trị tăng tự động

26

Tập bài giảng SQL Server

STT Tên biến Ý nghĩa

7 @@LANGUAGE Tên ngôn ngữ hiện tại đang sử dụng

8 @@MAX_CONNECTIONS Số lượng kết nối hiện tại đã có thể thực hiện

@@ROWCOUNT Số lượng các bản ghi bị ảnh hưởng bởi câu 9 lệnh SQL

10 @@SERVERNAME Tên của Server cục bộ

11 @@SERVICENAME Tên của dịch vụ SQL trên máy tính

@@TIMETICKS Số Mirco giây cho mỗi tích tắc trên máy tính 12 hiện tại

13 @@TRANSCOUNT Số giao dịch được mở trên kết nối hiện tại

14 @@VERSION Thông tin về phiên bản của SQL Server

Khai báo giá trị cho biến Câu lệnh SET hoặc SELECT dùng để gán giá trị cho biến.

Cú pháp:

SET @local_variable = value

hoặc

SELECT @local_variable = value

Ví dụ:

Declare @empID int

SET @empID=1

2) Các kiểu dữ liệu

Kiểu dữ liệu là một thuộc tính, nó 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. Các kiểu dữ liệu ép buộc dữ liệu phải toàn vẹn. SQL

Server 2008 hỗ trợ 3 kiểu dữ liệu:

- Kiểu dữ liệu hệ thống: được cung cấp bởi SQL Server 2008.

- Kiểu dữ liệu người dùng: là kiểu dữ liệu được tạo ra dựa trên kiểu dữ liệu hệ

thống.

- Kiểu dữ liệu được định nghĩa trong ngôn ngữ lập trình: là các kiểu dữ liệu

được tạo ra bằng cách sử dụng ngôn ngữ lập trình, chúng được hỗ trợ trong .Net Framework.

a) Các kiểu dữ liệu hệ thống

Mục Tên biến Ý nghĩa

Một trường được khai báo kiểu dữ liệu này

Exact Numbers int

sẽ sử dụng 4 byte trong bộ nhớ máy tính. Nó thường được sử dụng để lưu trữ giá trị số

27

Tập bài giảng SQL Server

Mục Tên biến Ý nghĩa

nguyên.

Một trường được khai báo kiểu dữ liệu này

smallint sẽ sử dụng 2 byte trong bộ nhớ máy tính. Nó có thể lưu trữ các số nguyên từ -32768 đến

32767.

Một trường của kiểu này chiếm 1 byte trong tinyint bộ nhớ. Có giá trị từ 0 đến 255.

Một trường được khai báo kiểu dữ liệu này

sẽ sử dụng 8 byte trong bộ nhớ máy tính. Nó bigint có thể lưu trữ các số nguyên từ -2^63 (-

9223372036854775807) đến 2^63-1

Một trường được khai báo kiểu dữ liệu này

numeric sẽ có độ chính xác cao và có thể co dãn kích

thước lưu trữ trong bộ nhớ.

bit Có giá trị 0 hoặc 1

Một trường được khai báo kiểu dữ liệu này

sẽ sử dụng 8 byte trong bộ nhớ máy tính. money Biểu diễn giá trị dữ liệu tiền tệ từ (-

2^63/10000) đến (2^63-1).

Một trường được khai báo kiểu dữ liệu này

sẽ sử dụng 8 byte trong bộ nhớ máy tính. float Biễu diễn các số chấm động từ -1.79E+308

đến 1.79E+308. Approximate

numerics Một trường được khai báo kiểu dữ liệu này

real

sẽ sử dụng 4 byte trong bộ nhớ máy tính. Biễu diễn các số chấm động có độ chính xác từ -3.4E+38 đến 3.40E+38.

datetime

Biễu diễn ngày và giờ. Được lưu trữ như là 2 số integer, chiếm 8 byte. (01-01-1753 to 31-12-9999) Date and time

Biểu diễn ngày và giờ (01-01-1990 to 31- smalldatetime 12-9999) chiếm 4 byte

char Character String Lưu trữ dữ liệu kí tự, nó được cố định kích thước và không hỗ trợ Unicode.

28

Tập bài giảng SQL Server

Mục Tên biến Ý nghĩa

Lưu trữ dữ liệu kí tự, độ dài có thể thay đổi varchar và không hỗ trợ Unicode.

text Lưu trữ dữ liệu kí tự, độ dài có thể thay đổi và không hỗ trợ Unicode.

Lưu trữ dữ liệu kí tự, nó được cố định kích nchar thước và có hỗ trợ Unicode.

Unicode Types Lưu trữ dữ liệu kí tự, độ dài có thể thay đổi nvarchar và có hỗ trợ Unicode.

Một trường được khai báo kiểu dữ liệu này

sẽ sử dụng 8 byte trong bộ nhớ máy tính. Nó Timestamp

chứa các số binary tự động phát sinh (mỗi hàng là một số duy nhất).

binary(n) Lưu trữ dữ liệu binary có độ dài cố định với

độ dài tối đa là 8000byte.

Các kiểu dữ liệu varbinary(n) Lưu trữ dữ liệu binary có độ dài thay đổi với

khác độ dài tối đa là 8000byte.

image Lưu trữ dữ liệu binary có độ dài thay đổi

với độ dài tối đa là (2^30-1) byte.

Một trường được khai báo kiểu dữ liệu này

uniqueidentifier sẽ sử dụng 16 byte trong bộ nhớ máy tính.

Ngoài ra nó lưu trữ một GUID (Globally

Unique dentifier)

b) Kiểu dữ liệu người dùng

Kiểu dữ liệu người dùng được dựa trên các kiểu dữ liệu được hệ thống cung

cấp. Có hai cách để tạo kiểu dữ liệu người dùng: dùng công cụ Management Studio (MS), dùng câu lệnh T-SQL.

- Sử dụng công cụ MS Bước 1: Chọn cơ sở dữ liệu/Chọn Programmability/Chọn Types/Chọn User-

Defined Data Type/Chọn New User-Defined Data Type.

29

Tập bài giảng SQL Server

Hình 2.1. Tạo kiểu dữ liệu người dùng

Bước 2: Nhập tên kiểu dữ liệu tại hộp Name/Chọn kiểu dữ liệu tại mục Data

type/ Chọn độ dài tại mục Length/Chọn Allow Nulls (Nếu cần)/Nhập giá trị mặc định

tại mục Default (nếu cần)/Thiết lập quy tắc tại mục Rule (Nếu cần)/Chọn OK.

Hình 2.2. Thiết lập các thông số cho kiểu dữ liệu người dùng

- Sử dụng câu lệnh T-SQL: Chúng có thể được tạo bằng cách sử dụng câu lệnh

CREATE TYPE.

Cú pháp CREATE TYPE [ schema_name. ] type_name {FROM base_type [ ( precision

[ , scale ] ) ] [ NULL | NOT NULL ] } [ ; ]

Trong đó: - schema_name: là tên của giản đồ mà kiểu dữ liệu người dùng đang được tạo ra. - type_name: là tên kiểu dữ liệu người dùng. - base_type: là tên của kiểu dữ liệu hệ thống cơ sở.

- precision and scale: chỉ ra độ chính xác và độ co dãn đối với kiểu dữ liệu

numeric

30

Tập bài giảng SQL Server

- NULL | NOT NULL: qui định kiểu dữ liệu có cho phép chứa giá trị null hay

không.

Ví dụ:

CREATE TYPE usertype FROM varchar(20) NOT NULL

3) Các toán tử (Operators) Trong SQL Server các biểu diễn (expression) có thể xuất hiện nhiều toán tử. Độ ưu tiên của toán tử sẽ quyết định thứ tự thực hiện của các phép tính. Thứ tự thực hiện ảnh hưởng rất lớn đến kết quả. Bảng dưới đây mô tả các toán tử trong SQL Server

2008 và mức độ ưu tiên của các toán tử đó.

Level Operators

* (Multiply), / (Division), % (Modulo) 1

+ (Positive), - (Negative), + (Add), (+ Concatenate), - (Subtract) 2

=, >, <, >=, <=, <>, !=, !>, !< (Comparison operators) 3

4 NOT

5 AND

6 ALL, ANY, BETWEEN, IN, LIKE, OR, SOME

7 = (Assignment)

4) Biểu thức

Biếu thức là kết hợp nhiều phần tử: toán tử, giá trị, định danh mà SQL Server

có thể ước tính được để trả về một kết quả. Biểu thức có thể được sử dụng trong nhiều

trường hợp khi truy cập hoặc thay đổi dữ liệu. Sử dụng toán tử trong biểu thức. Toán

tử được dùng để thực hiện tính toán, so sánh, ghép hoặc gán giá trị.

5) Các hàm

Hàm là tập lệnh Transact-SQL để thực hiện công việc nào đó. Hàm trong SQL

làm việc với dữ liệu, nhóm dữ liệu để trả về một kết quả mong đợi. Transact-SQL có

các loại hàm sau:

- Các hàm tập hợp. - Các hàm chuyển đổi kiểu dữ liệu.

- Các hàm ngày tháng. - Các hàm toán học. - Các hàm xử lý xâu.

- Các hàm hệ thống.

- Các hàm xếp hạng. a) Các hàm tập hợp: Transact-SQL hỗ trợ các hàm tập hợp để thống kê dữ

liệu.

31

Tập bài giảng SQL Server

STT Tên hàm Giá trị trả về Ví dụ

1

SELECT SUM(soluong) AS Total FROM muaban

SUM(col_name) Hàm tính tổng, trả về tổng giá trị của col_name

2 AVG(col_name) Trả tính giá trị trung

bình SELECT AVG(soluong*dongia) AS AveragePrice FROM muaban

COUNT Đếm số bản ghi SELECT COUNT(*) AS 3

trong bảng

„Number of Large Orders‟ FROM muaban

WHERE soluong > 100

4 MAX(col_name) Trả về giá trị lớn

nhất SELECT MAX(soluong*dongia) AS „Largest Order‟ FROM

Purchasing.PurchaseOrderDetail

5 MIN(col_name)

Trả về giá trị nhỏ nhất SELECT MIN(soluong*dongia) AS „Smallest Order‟ FROM

muaban

b) Hàm chuyển đổi kiểu dữ liệu Hàm chuyển đổi được sử dụng để biến đổi giá trị của một kiểu dữ liệu sang kiểu

dữ liệu khác

Cú pháp:

CONVERT(datatype[(length)], expression [,style])

Trong đó:

- datatype là kiểu dữ liệu cần chuyển sang,

- length chỉ ra độ dài của dữ liệu,

- expression chỉ ra tên trường, hằng số, hàm, biến hoặc là câu truy vấn con

- style chỉ ra kiểu hiển thị giá trị ngày tháng(dd/mm/yyyy hay mm/dd/yyyy)

c) Các hàm ngày tháng Hàm ngày tháng được dùng để thao tác giá trị ngày tháng. Hàm ngày tháng cho

phép chúng ta lấy một phần của giá trị ngày tháng như: lấy ngày, tháng hoặc năm. DATEPART là một phần giá trị ngày tháng, được kết hợp sử dụng trong hàm ngày tháng để lấy một phần nào đó của giá trị ngày tháng. Tất cả các DATEPART được hỗ trợ trong Transact-SQL.

32

Tập bài giảng SQL Server

STT Datepart Abbreviation Values

Hour Hh 0-23

Mi 0-59 1 2 Minute

3 Second Ss 0-59

4 Millisecond Ms 0-999

Day of Year Dy 5 1-366

6 Day Dd 1-31

7 Week Wk 1-53

8 Weekday Dw 1-7

9 Month Mm 1-12

10 Quarter Qq 1-4

11 Year Yy 1753-9999

Các hàm ngày tháng

STT Hàm Giá trị trả về Ví dụ

Trả về ngày hiện SELECT 1 GETDATE() tại của hệ thống GETDATE()

SELECT

Cộng vào thêm DATEADD(mm,4,‟0

2 DATEADD(datepart,number,date) number giá trị vào 1/01/99‟) - returns

date 05/01/99 in the

current date format

SELECT

So sánh giữa hai DATEDIFF(mm,‟01/ 3 DATEDIFF(datepart,date1,date2) giá trị ngày tháng 01/99‟,‟05/01/99‟) -

returns 4

Trả về giá trị ngày SELECT DATENAME(dw,‟0 4 DATENAME(datepart,date)

tháng dưới dạng chuỗi 1/01/2000‟) - returns Saturday

5 DATEPART(datepart,date) Trả về một phần giá trị ngày tháng

SELECT DATEPART(day,‟01 /15/2000‟) - returns 15

33

Tập bài giảng SQL Server

d) Các hàm toán học: Thực hiện các phép tính đại số trên trường dữ liệu/giá trị

số.

STT Hàm Giá trị trả về Ví dụ

1 ABS(num_expr) Trả về giá trị tuyệt đối SELECT ABS (-43) return 43

Trả về giá trị nhỏ nhất SELECT

2 CEILING(num_expr) lớn hơn hoặc bằng CEILING(43.5)

num_expr returns 44

Trả về giá trị lớn nhất SELECT

3 FLOOR(num_expr) nhỏ hơn hoặc bằng FLOOR(43.5)

num_expr returns 43

4 POWER(num_expr,y) Hàm lũy thừa SELECT POWER(5,2)

returns 25

SELECT

ROUND(43.543 5 ROUND(num_expr,length) Hàm làm tròn ,1) returns

43.500

Trả về +1 nếu num_expr SELECT là số dương, -1 nếu 6 SIGN(num_expr) SIGN(-43) num_expr là số âm, 0 returns -1 nếu num_expr bằng 0

SELECT

7 SQRT(float_expr) Hàm căn bậc hai SQRT(9) returns

3

select CUSTOMERN AME, Hàm isNumeric kiểm tra một giá trị có phải thuộc 8 ISNUMERIC(num_expr)

kiểu dữ liệu số hay không. isnumeric(ADD RESS) as ISNUMERIC

from customers

34

Tập bài giảng SQL Server

e) Hàm xử lý xâu:

STT Hàm Giá trị trả về Ví dụ

Trả về mã ASCII của kí tự ASCII(“A”) ASCII(st) 1 đầu tiên trong xâu st

Trả về 65

Trả về kí tự có mã ASCII là Char(90) CHAR(n) 2 n Trả về Z

Chuyển các chuỗi ký tự UPPER() select upper(„khoa cntt‟) 3 thường trong chuỗi thành Trả về „KHOA CNTT‟ các ký tự hoa.

LOWER(st) 4 Chuyển các ký tự hoa trong chuỗi thành các kí tự select lower(„KHOA CNTT‟)

thường. Trả về „khoa cntt‟

select len(„KHOA LEN(st) 5 Trả về chiều dài một chuỗi CNTT‟)

Trả về 9

LTRIM() Cắt các khoảng trắng bên select ltrim(„ KHOA‟) 6 trái của chuỗi Trả về „KHOA‟

RTRIM() Cắt các khoảng trắng bên select ltrim(„KHOA „) 7 phải của chuỗi Trả về „KHOA‟

Trả về một chuỗi ký tự có select left(„KHOA LEFT(st,k) 8 chiều dài k được chỉ định CNTT‟, 4)

tính từ bên trái của chuỗi. Trả về „KHOA‟

Trả về một chuỗi ký tự có select right(„KHOA

9 RIGHT(st,k)

chiều dài k được chỉ định tính từ bên phải của chuỗi. CNTT‟, 4) Trả về „CNTT‟

select substring(„KHOA SUBSTRING Trích xuất một chuỗi con 10 (st, i, k) gồm k từ vị trí thứ k. CNTT‟, 4) Trả về „CNTT‟

select replace(„KHOA CNTT‟, „CNTT‟, „TIN

11 HOC‟) REPLACE(st,s t1, st2) Thay thế chuỗi st1 trong chuỗi st bởi chuỗi st2

Trả về „KHOA TIN HOC‟

35

Tập bài giảng SQL Server

select stuff(„KHOA

Thay thế k ký tự trong chuỗi CNTT‟, 6, 4, „TIN STUFF(st,n,k,s 12 st bằng chuỗi st1 bắt đầu từ HOC‟) t1) vị trí thứ n.

Trả về „KHOA TIN HOC‟

Trả về vị trí đầu tiên của select

CHARINDEX( chuỗi st1 xuất hiện trong CHARINDEX(„CNTT‟,‟ 13 st1,st[,n])

chuỗi st của lần xuất hiện thứ n KHOA CNTT‟) Trả về 6

g) Hàm hệ thống: Trả về dữ liệu hệ thống hay thông tin cấu hình của SQL

Server .

STT Hàm Giá trị trả về

DB_ID([„database_name‟]) Trả về số định danh của cơ sở dữ liệu 1

DB_NAME([database_id]) Trả về tên cơ sở dữ liệu 2

HOST_ID() Trả về số định danh cho máy trạm 3

HOST_NAME() Trả về tên máy trạm 4

Nếu expr là NULL thì được thay thế ISNULL(expr,value) 5 bằng giá trị VALUE

OBJECT_ID(„obj_name‟) Số định danh đối tượng 6

OBJECT_NAME(object_id) Trả về tên đối tượng 7

USER_ID([„user_name‟]) Số định danh người dùng 8

USER_NAME([user_id]) Tên người dùng 9

h) Hàm xếp hạng: Những hàm này trong SQL Server được dùng để liên kết các tập kết quả đã sắp

xếp và các giá trị hàng đầu dùng thứ tự chỉ ra độc lập với thứ tự kết quả.

- Hàm ROW_NUMBER() Cú pháp: ROW_NUMBER() OVER (ORDER BY expression)

Trong đó: expression chỉ ra tên trường, hằng số, hàm, biến. Hàm này trả về số nguyên với giá trị tăng dần dựa trên mệnh đề ORDER BY được truyền cho hàm. Nếu ORDER BY của ROW_NUMBER trùng với thứ tự kết quả thì giá trị được tăng lên. Nếu ORDER BY của ROW_NUMBER không trùng với ORDER BY của tập kết quả thì những giá trị này không được liệt kê theo thứ tự nhưng vẫn thể hiện theo thứ tự ORDERY BY của ROW_NUMBER.

36

Tập bài giảng SQL Server

Ví dụ 1: Trong phát biểu sau, thứ tự ORDER BY của ROW_NUMBER trùng khớp với thứ tự ORDER BY trong tập kết quả. Do đó, giá trị của ROW_NUMBER trả

về được liệt kê theo thứ tự.

USE QLTS

SELECT sbd, hoten, dtoan, ROW_NUMBER() OVER (ORDER BY dtoan) FROM thisinh ORDER BY dtoan as sx Ví dụ 2: Trong phát biểu sau, thứ tự ORDER BY của ROW_NUMBER không

trùng khớp với thứ tự ORDER BY trong tập kết quả.

USE QLTS

SELECT sbd, hoten, dtoan, ROW_NUMBER() OVER (ORDER BY dtoan)as

sx FROM thisinh

ORDER BY sbd

Kết quả ví dụ 1 Kết quả ví dụ 2

- Hàm RANK()

Dùng hàm Rank để một dòng có cùng sắp xếp giá trị trường như các dòng khác

có cùng một xếp loại.

Cú pháp: RANK() OVER (ORDER BY expression) Trong đó: expression chỉ ra tên trường, hằng số, hàm, biến. Hàm RANK sẽ đánh số liên tục một tập hợp bản ghi nhưng khi có 2 dòng có cùng giá trị sắp xếp thì hàm sẽ đánh giá là cùng bậc giá trị. Giá trị xếp loại vẫn sẽ tăng

37

Tập bài giảng SQL Server kể cả khi có 2 dòng cùng giá trị. Vì vậy, khi đánh giá một giá trị sắp xếp tiếp theo thì số thứ tự vẫn tiếp tục được đánh nhưng sẽ tăng thêm 1 giá trị vào các dòng tiếp theo

trong tập hợp.

Ví dụ: Sắp xếp tuổi trong bảng thisinh. Những thí sinh cùng tuổi sẽ được sắp

xếp cùng một bậc. USE QLTS SELECT sbd, hoten, RANK() OVER(ORDER BY DATEDIFF(YEAR, ngaysinh, GETDATE())) sbd, DATEDIFF(YEAR, ngaysinh, GETDATE()) tuoi

FROM thisinh

- Hàm DENSE_RANK()

Hàm DENSE_RANK cũng giống như hàm RANK. Tuy vậy, hàm này không

cung cấp khoảng cách giữa các số xếp loại. Thay vào đó, hàm này sẽ xếp loại liên tục cho từng giá trị ORDER BY cụ thể. Với hàm DENSE_RANK, kể cả khi có hai dòng

có cùng giá trị xếp loại thì dòng tiếp theo vẫn chỉ tăng thêm một giá trị so với dòng

trên. Hàm DENSE_RANK có cú pháp như hàm RANK.

Cú pháp:

DENSE_RANK() OVER (ORDER BY expression)

Trong đó: expression chỉ ra tên trường, hằng số, hàm, biến.

Ví dụ: Sắp xếp tuổi trong bảng thisinh.

USE QLTS

SELECT sbd, hoten, DENSE_RANK() OVER(ORDER BY

DATEDIFF(YEAR, ngaysinh, GETDATE())) sbd, DATEDIFF(YEAR,

ngaysinh, GETDATE()) tuoi

FROM thisinh - Hàm NTILE

Hàm NTILE được sử dụng để phá vỡ tập hợp bản ghi trong một số cụ thể của

các nhóm. Hàm NTILE cũng sử dụng cú pháp như các hàm ranking khác. Hàm NTILE chỉ có tác dụng chia đều số lượng các bản ghi và đưa vào từng nhóm số. Sử dụng hàm NTILE cho từng bản ghi trong một nhóm sẽ đưa các giá trị xếp loại giống nhau. Hàm

NTILE là một hàm rất có ích nếu bạn chỉ muốn trả lại một nhóm cụ thể trong các bản

ghi.

Cú pháp:

NTILE(n) OVER (ORDER BY expression)

Trong đó: expression chỉ ra tên trường, hằng số, hàm, biến; n là số nhóm muốn

trả về.

Ví dụ

38

Tập bài giảng SQL Server

use qlts SELECT sbd, hoten, ntile(3) OVER(ORDER BY DATEDIFF(YEAR,

ngaysinh, GETDATE())) sbd, DATEDIFF(YEAR, ngaysinh, GETDATE()) tuoi

from Thisinh

Kết quả hàm Rank Kết quả hàm DENSE_Rank Kết quả hàm NTile

6) Giá trị NULL

Một cơ sở dữ liệu là sự phản ánh của một hệ thống trong thế giới thực, do đó

các giá trị dữ liệu tồn tại trong cơ sở dữ liệu có thể không xác định được. Một giá trị

không xác định được xuất hiện trong cơ sở dữ liệu có thể do một số nguyên nhân sau:

- Giá trị đó có tồn tại nhưng không biết.

- Không xác định được giá trị đó có tồn tại hay không.

- Tại một thời điểm nào đó giá trị chưa có nhưng rồi có thể sẽ có.

- Giá trị bị lỗi do tính toán (tràn số, chia cho không,...). - Những giá trị không xác định được biểu diễn trong cơ sở dữ liệu quan hệ bởi

các giá trị NULL. Đây là giá trị đặc biệt và không nên nhầm lẫn với chuỗi rỗng (đối

với dữ liệu kiểu chuỗi) hay giá trị không (đối với giá trị kiểu số). Giá trị NULL đóng một vai trò quan trọng trong các cơ sở dữ liệu và hầu hết các hệ quản trị cơ sở dữ liệu quan hệ hiện nay đều hỗ trợ việc sử dụng giá trị này.

7) Các cấu trúc điều khiển chương trình

Giới thiệu về xử lý một khối câu lệnh SQL

39

Tập bài giảng SQL Server

- BEGIN..END

Tác dụng: Dùng để nhóm các câu lệnh T-SQL

Cú pháp:

BEGIN

{ statement | statement_block}

END

Ví dụ:

USE QLTS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here select dbo.Thisinh.sbd, dbo.Thisinh.hoten , dbo.Thisinh.ngaysinh ,

dbo.Thisinh.quequan, dbo.Thisinh.gioitinh, dbo.Nganh.tenn

from dbo.Thisinh, dbo.Nganh

where dbo.Thisinh.man = dbo.Nganh.man

and (dbo.Nganh.tenn='Ke toan' or dbo.Nganh.tenn='Cong nghe thong

tin')

END - IF..ELSE Tác dụng: Dùng để thực hiện câu lệnh T-SQL theo điều kiện

Cú pháp: IF Boolean_expression sql_statement|statement_block [ELSE

sql_statement|statement_block]

Ví dụ:

USE QLTS

40

Tập bài giảng SQL Server

if(select count(man) from thisinh where man='MN01') >1

begin

select * from Thisinh

end

else

begin select * from Nganh end

- CASE

Biểu thức CASE trong Transaction-SQL vô cùng hữu ích. Hoạt động của biểu

thức CASE rất đơn giản chỉ là thực hiện việc so sánh một biểu thức bất kỳ với hàng

loạt các giá trị chỉ định trước đó, nếu bạn là người lập trình trong môi trường Visual Basic thì biểu thức CASE của Transaction-SQL gần giống như cấu trúc điều khiển

Select Case.

Tác dụng: Cho phép trả về một giá trị dựa trên một biểu thức đúng.

Cú pháp:

CASE expression

WHEN expression1 THEN expression1

[WHEN expression2 THEN expression2] […]]

ELSE expression]

END

Ví dụ 1:

USE QLTS

Select SBD, Hoten, Case Gioitinh When 1 Then 'Nam' ELSE 'Nu' end ,

Case Datepart(dw, thisinh.ngaysinh)

When 1 then 'Chu nhat' When 2 then 'Thu 2' When 3 then 'Thu 3'

When 4 then 'Thu 4'

When 5 then 'Thu 5' When 6 then 'Thu 6'

When 7 then 'Thu 7'

end From Thisinh

Ví dụ 2:

41

Tập bài giảng SQL Server

USE QLTS UPDATE Thisinh

SET quequan =

CASE

WHEN quequan = 'Ha Tay' THEN 'Ha Noi' ELSE quequan END,

man =

CASE

WHEN man = 'NH01'

THEN 'MN01' ELSE man

END

- WHILE

Với cấu trúc lặp, người lập trình có thể chỉ định một hoặc nhiều câu lệnh sẽ

được thực hiện lặp lại nhiều lần trong khi giá trị của biểu thức so sánh vẫn còn đúng.

Giống như cấu trúc rẽ nhánh, cấu trúc lặp được phép sử dụng bên trong một lô (batch)

các lệnh hoặc bên trong một thủ tục lưu trữ. Giữa cấu trúc rẽ nhánh và cấu trúc lặp

không có thứ tự ưu tiên khi chúng lồng vào nhau và cấp độ lồng nhau là không có giới

hạn.

Tác dụng: Vòng lặp sẽ được thực hiện cho đến khi biểu thức trong WHILE sai

Cú pháp:

WHILE Boolean_expression { statement | statement_block }

[ BREAK ]

{ statement | statement_block } [ CONTINUE ]

Ví dụ 1:

use qlmbh

GO WHILE (SELECT AVG(dongia) FROM muaban where muaban=1) < 50

BEGIN

UPDATE muaban SET dongia = dongia + dongia*0.1

SELECT MAX(dongia) FROM muaban

42

Tập bài giảng SQL Server

IF (SELECT MAX(dongia) FROM muaban) > 50

BREAK

ELSE

CONTINUE

END

Ví dụ 2: In ra 10 số nguyên dương bắt đầu từ 100.

Declare @sn int Set @sn=100

While (@sn<110)

Begin

Print 'So nguyen: ' +convert(char(3),@sn)

Set @sn=@sn+1 End

Ví dụ 3: Thực hiện việc lặp giống ví dụ trên, tuy nhiên muốn rằng vòng lặp sẽ

bị kết thúc khi mới in tới số nguyên 105.

Declare @sn int

Set @sn=100

While (@sn<110)

Begin

Print 'So nguyen: ' +convert(char(3),@sn)

If @sn=105

break

Set @sn=@sn+1

End Print 'Ket thuc vong lap'

Ví dụ 4: Thực hiện việc lặp giống các ví dụ trên, tuy nhiên muốn rằng vòng lặp

sẽ không in số nguyên 105

Declare @sn int Set @sn=99

While (@sn<110)

Begin Set @sn=@sn+1

If @sn=105

Continue

Print 'So nguyen: ' +convert(char(3),@sn)

End

43

Tập bài giảng SQL Server

Print 'Ket thuc vong lap'

Kết quả ví dụ 2 Kết quả ví dụ 3 Kết quả ví dụ 4

- RETURN

Tác dụng: Sử dụng RETURN tại bất kỳ đâu trong chương trình để thoát ra khỏi

một khối, một thủ tục. Các câu lệnh sau RETURN không được thực hiện.

Cú pháp:

RETURN [ integer_expression ]

Ví dụ 1:

USE [QLTS]

GO create PROCEDURE [dbo].[sp_thu]

AS

BEGIN

declare @slts int

select @slts=(select COUNT(sbd) from thisinh where man='MN01')

return @slts

print 'So luong thi sinh:' + str(@slts)

END

- WAITFOR

Tác dụng: Câu lệnh WAITFOR chỉ thị cho SQL Server tạm dừng một thời gian

nhất định trước khi xử lý tiếp các câu lệnh sau đó.

Cú pháp: WAITFOR DELAY <'Time'> | TIME <'Time'> Trong đó: DELAY là thời gian chờ nhất định tính bằng giờ phút giây, thời gian

lớn nhất là 24 giờ; không thể sử dụng các tham số là ngày tháng năm.

TIME là thời gian chờ cho đến khi thời gian được chỉ định mới thực

hiện tiếp các lệnh sau đó.

Ví dụ 1: Máy tính chờ trong 2 giây rồi mới hiện dòng thông báo „Bat dau‟.

44

Tập bài giảng SQL Server

WAITFOR DELAY '00:00:02' print 'Bat dau'

Ví dụ 2: Máy tính chờ đến 2 giờ 27 phút 0 giây rồi mới hiện dòng thông báo

„Bat dau‟.

WAITFOR time '2:27:00' print 'Bat dau chay' - PRINT Tác dụng: Đưa thông báo tới máy khách

Cú pháp:

PRINT msg_str|@local_variable|string_expr

Trong đó :

- msg_str: Là một xâu kí tự thông báo hoặc một hằng xâu Unicode. - @ local_variable: Là một biến xâu, phải có kiểu dữ liệu là char hoặc varchar

- string_expr: Là một biểu thức trả về một xâu.

Ví dụ: Đưa ra số thí sinh đăng kí dự thi ngành „MN01‟.

use qlts

declare @sots int

select @sots=(select COUNT(*) from thisinh where man='MN01')

print 'Số thí sinh đăng kí dự thi ngành MN001 là: ' +str(@sots)

8) Chú thích

Chú thích là các diễn giải trong chương trình (đoạn lệnh) mà trình biên dịch sẽ

bỏ qua. Mục đích của việc dùng chú thích là giải thích mã lệnh để bảo trì hoặc sửa đổi

về sau dễ dàng. Chúng ta có thể sử dụng chú thích trong từng câu lệnh, tập lệnh hoặc

dùng trong thủ tục lưu trữ . Microsoft SQL Server hỗ trợ hai loại chú thích sau:

- chú thích trên 1 dòng dùng hai dấu trừ: --

- chú thích nhiều dòng: /* . . . */

Ví dụ 1: Chú thích trên 1 dòng USE AdventureWorks -- Employee table contains the details of an employee.

-- This statement retrieves all the rows of the table Employee.

SELECT * FROM Employee Ví dụ 2: Chú thích trên nhiều dòng

/* Employee table contains the details of an employee.

This statement retrieves all the rows of the table Employee.*/

SELECT * FROM Employee

45

Tập bài giảng SQL Server 2.2. Ngôn ngữ định nghĩa dữ liệu

Ngôn ngữ định nghĩa dữ liệu (Data Definition Language-DDL) là một trong số

những loại ngôn ngữ của SQL, được sử dụng để định nghĩa và quản lý tất cả các thuộc

tính của một cơ sở dữ liệu, bao gồm bố cục của các hàng, định nghĩa trường, khóa, vị

trí lưu file…Các câu lệnh DDL được dùng để định nghĩa (xây dựng), thay đổi hoặc xóa cấu trúc của các đối tượng cơ sở dữ liệu, chẳng hạn: cơ sở dữ liệu, bảng, view, trigger, thủ tục lưu trữ, …Trong chương này, ta sẽ tìm hiểu các câu lệnh DDL cho các đối tượng là cơ sở dữ liệu, bảng, view. Riêng các câu lệnh DDL cho các đối tượng thủ

tục, hàm, trigger sẽ tìm hiểu trong các chương sau.

Các câu lệnh DDL có dạng như sau:

- Tạo đối tượng

- Sửa đổi đối tượng - Xóa đối tượng

2.2.1. Tạo đối tượng Để tạo một đối tượng, dùng cú pháp Create

1) Tạo cơ sở dữ liệu

Tác dụng: Câu lệnh CREATE DATABASE tạo ra một cơ sở dữ liệu.

Cú pháp:

CREATE DATABASE

[ON [Primary]

(

[NAME=<‟Logical file name‟>,]

FILENAME=<‟File name‟>

[,SIZE=<‟Size of File‟>] [,MAXSIZE=<‟Max size of File‟>]

[,FILEGROWTH=<‟Init size of File‟>]

)] [LOGON (

[NAME=<‟Logical file name‟>,]

FILENAME=<‟File name‟> [,SIZE=<‟Size of File‟>]

[,MAXSIZE=<‟Max size of File‟>]

[,FILEGROWTH=<‟Init size of File‟>]

)]

[COLLATE ]

46

Tập bài giảng SQL Server

[FOR ATTACH] Trong đó:

ON: Định nghĩa nơi chứa cơ sở dữ liệu

NAME: Định nghĩa tên cơ sở dữ liệu. Tên này dùng để tham chiếu khi

gọi đến cơ sở dữ liệu, tên được dùng trong quá trình backup, export, import, shrink cơ sở dữ liệu đó.

FILENAME: Định nghĩa tên tệp tin lưu trong ổ cứng. SIZE: Xác định dung lượng của cơ sở dữ liệu khi khởi tạo.

MAXSIZE: Xác định dung lượng lớn nhất của cơ sở dữ liệu khi khởi

tạo.

FILEGROWTH: Xác định dung lượng khởi tạo cùng dung lượng tối đa

cho phép tăng trong quá trình thêm dữ liệu vào cơ sở dữ liệu.

LOG ON: Cho phép quản lý những chuyển tác xảy ra trong quá trình sử

dụng cơ sở dữ liệu của SQL Server.

COLLATE: Xác định bản đối chiếu mặc định cho cơ sở dữ liệu. Tên bản

đối chiếu có thể là tên của bản đối chiếu Window hoặc tên bản đối chiếu của SQL.

FOR ATTACH: Xác định cơ sở dữ liệu được tạo bằng cách gắn một tập

các file hệ thống đang tồn tại.

Ví dụ 1:

CREATE DATABASE Qlts

Ví dụ 2:

CREATE DATABASE Qlmbh

ON

(

NAME=‟Qlmbh‟

FILENAME=‟D:\BT_SQL\DATA\qlmbhdat.mdf‟

SIZE=10 MAXSIZE=50 FILEGROWTH=5)

LOGON

(

NAME=‟QlmbhLog‟,

FILENAME=‟D:\BT_SQL\DATA\qlmbhlog.mdf‟,

SIZE=5, MAXSIZE=15,

FILEGROWTH=5)

47

Tập bài giảng SQL Server

2) Tạo bảng Tác dụng: Câu lệnh CREATE TABLE tạo ra một bảng trong một cơ sở dữ liệu

Cú pháp:

CREATE TABLE [Database_Name.[ower].]

(Column_Name Data_Type [[DEFAULT ]| [IDENTITY(Seed,increament) [NOT FOR REPLICATION]]] [NULL|NOT NULL]

[]

[]

)ON []

Trong đó:

- Database_Name: Tên cơ sở dữ liệu

- Table_Name: Tên bảng dữ liệu

- Column_Name: Tên trường dữ liệu

- Data_Type: Kiểu dữ liệu

- DEFAULT: Giá trị mặc nhiên

- IDENTITY: Xác định giá trị tăng tự động của trường, seed là giá trị khởi đầu,

increament là bước tăng.

- NULL|NOT NULL: Cho phép trường chấp nhận giá trị Null không.

- Column Constraint: Xác định trường có bị ràng buộc không.

- Column_Name: Xác định trường ảo (giá trị của trường được xây dựng từ

trường khác)

Ví dụ: CREATE TABLE thisinh

(sbd varchar(20) not null,

hoten text null, ngaysinh datetime null, gioitinh bit default(0) not null,

quequan text null,

dtoan float null, dly float null,

dhoa float null,

maut nvarchar(20) not null, man nvarchar(20) not null,

sophong int null

48

Tập bài giảng SQL Server

) ON Primary

3) Tạo view

Tác dụng: Câu lệnh CREATE VIEW tạo ra một view.

Cú pháp:

CREATE VIEW [Database_Name.[ower].] [()] [WITH [ENCRYPTION]] [,SCHEMABINDING]

[,VIEWMETADATA]

AS

[WITH CHECK OPTION]

Ví dụ: Thêm điều kiện tìm kiếm thí sinh theo quê quán là „Nam Dinh‟ cho view Vidu

use qlts

go ALTER VIEW vidu AS Select sbd, hoten, dtoan+dly+dhoa

From thisinh

Where quequan=‟Nam Dinh‟

2.2.3. Xóa đối tượng 1) Xóa cơ sở dữ liệu Tác dụng: Lệnh DROP DATABASE dùng để xóa cơ sở dữ liệu.

Cú pháp:

DROP DATABASE

Với là tên cơ sở dữ liệu sẽ bị xóa.

Ví dụ:

DROP DATABASE qlts

2) Xóa bảng

Tác dụng: Lệnh DROP TABLE dùng để xóa bảng khỏi cơ sở dữ liệu. Khi xóa

bảng, tất cả các đối tượng thuộc bảng như: chỉ mục, trigger, ràng buộc, và quyền chỉ

định cho bảng đó đều bị xóa.

Cú pháp:

DROP TABLE Với là tên bảng dữ liệu sẽ bị xóa.

Ví dụ:

DROP TABLE thisinh

3) Xóa View

Tác dụng: Lệnh DROP VIEW dùng để xóa view khỏi cơ sở dữ liệu. Khi xóa

View; định nghĩa View và tất cả các thông tin của View được xóa khỏi danh muc hệ

thống, tất các các quyền truy cập View cũng bị xóa.

Cú pháp:

DROP VIEW

Với là tên View sẽ bị xóa. Ví dụ: Xóa view ví dụ

DROP VIEW vidu

52

Tập bài giảng SQL Server

2.2.4. Các loại ràng buộc dữ liệu Trong một cơ sở dữ liệu, khi bảng có sự thay đổi dữ liệu thì chúng phải tuân

theo một quy luật nhất định nhằm đảm bảo được tính ràng buộc toàn vẹn đối với dữ

liệu đang tồn tại trong các bảng có quan hệ với nhau. Ràng buộc (Constraints) được

dùng để kiểm tra khi có sự biến đổi từ phía dữ liệu như thêm vào, xóa, cập nhật từ bất kỳ một nguồn dữ liệu nào khác. Ví dụ từ chính trong môi trường SQL Server, từ các chương trình Visual Bacsic, Visual Bacsic.Net, Java, C#,.. truy cập đến cơ sở dữ liệu. Khi có sự thay đổi dữ liệu trong bảng thì quá trình kiểm tra ràng buộc được thực hiện

như một phương thức. Phương thức này sẽ kiểm tra tất cả các điều kiện và các quy luật

đã thiết lập khi xây dựng cơ sở dữ liệu. Nếu dữ liệu được thêm vào, xóa, hay cập nhật

không thỏa mãn các điều kiện hoặc các quy luật đã định nghĩa thì SQL Server sẽ đưa

ra thông báo cho người dùng biết là dữ liệu đưa vào không hợp lệ. Dữ liệu khi đó sẽ không được phép cập nhật và thay đổi trong cơ sở dữ liệu.

Các loại ràng buộc:

- Ràng buộc miền (Domain constraints)

- Ràng buộc thực thể (Entity constraints)

- Ràng buộc toàn vẹn (Reference intergrity constraints)

- Ràng buộc khóa chính (Primary Key constraints)

- Ràng buộc khóa ngoại (Foreign Key constraints)

- Ràng buộc duy nhất (Unique constraints)

- Ràng buộc kiểm tra (Check constraints)

- Ràng buộc mặc nhiên (Default constraints)

1) Ràng buộc miền (Domain constraints)

Ràng buộc miền liên quan đến một hay nhiều trường. Ứng với mỗi trường có các quy luật hay tiêu chuẩn. Khi thêm hay cập nhật các bản ghi, ràng buộc này sẽ kiểm tra

mà không cần xét đến sự liên quan của các bản ghi trong bảng.

2) Ràng buộc thực thể (Entity constraints) Ràng buộc thực thể liên quan đến bản ghi. Khi thêm hay cập nhật các bản ghi, ràng

buộc sẽ kiểm tra dữ liệu có đúng với tiêu chuẩn hay không.

3) Ràng buộc toàn vẹn (Reference intergrity constraints)

Ràng buộc toàn vẹn liên quan đến bảng có quan hệ với bảng hiện tại. Khi thêm hay cập nhật các bản ghi, ràng buộc sẽ kiểm tra giá trị của trường có phù hợp với trường

trong bảng quan hệ khác với bảng hiện chứa trường ràng buộc hay không.

4) Ràng buộc khóa chính (Primary Key constraints) Ràng buộc Primary Key được sử dụng để định nghĩa khoá chính của bảng. Khoá

chính của một bảng là một hoặc một tập nhiều trường mà giá trị của chúng là duy nhất

53

Tập bài giảng SQL Server trong bảng. Hay nói cách khác, giá trị của khoá chính sẽ giúp cho ta xác định được duy nhất một dòng (bản ghi) trong bảng dữ liệu. Mỗi một bảng chỉ có thể có duy nhất một

khoá chính và bản thân khoá chính không chấp nhận giá trị NULL.

Ràng buộc Primary Key là cơ sở cho việc đảm bảo tính toàn vẹn thực thể cũng như

toàn vẹn tham chiếu. Khi thêm hay cập nhật trên trường Primary Key thì quá trình kiểm tra ràng buộc Primary Key sẽ xảy ra.

Cú pháp: [CONSTRAINT tên_ràng_buộc]PRIMARY KEY [(danh_sách_trường)]

Chú ý:

- Nếu khoá chính của bảng chỉ có một trường và ràng buộc Primary Key được chỉ định ở

mức trường, thì không cần phải chỉ ra danh sách trường sau từ khoá Primary Key.

- Nếu khóa chính của bảng gồm có 2 trường trở lên thì phải chỉ ra danh sách các trường sau từ khóa Primary Key và tên các trường được phân cách nhau bởi dấu phẩy.

Trong trường hợp này, việc khai báo khoá chính được tiến hành ở mức bảng.

Ví dụ 1: Tạo ràng buộc Primary Key cho bảng ngành đã có sẵn.

use qlts

alter table nganh

add constraint PK_man Primary key (man)

Ví dụ 2: Tạo bảng Ưu tiên

Cách 1

CREATE TABLE uutien

(maut varchar(20) not null Primary key,

tenut text null,

dc int )

Cách 2

CREATE TABLE uutien (maut varchar(20) not null constraint chk_primarykey primary key,

tenut text null,

dc int )

5) Ràng buộc khóa ngoại (Foreign Key constraints)

Foreign Key là một trường hay nhiều trường được sử dụng để tạo mối liên kết dữ liệu giữa hai bảng. Foreign Key của một bảng sẽ giữ giá trị của Primary Key của một

bảng khác và chúng ta có thể tạo ra nhiều Foreign Key trong một bảng.

54

Tập bài giảng SQL Server

Foreign Key có thể tham chiếu vào Primary Key hay trường có ràng buộc duy nhất.

Foreign Key có thể chứa giá trị NULL.

Ràng buộc Foreign Key không những kiểm soát dữ liệu chứa trong bảng có

Foreign Key (tức bảng con) mà còn kiểm soát luôn cả dữ liệu trong bảng chứa Primary

Key (tức bảng cha). Ví dụ nếu ta xóa dữ liệu trong bảng cha thì dữ liệu trong bảng con trở nên "mồ côi" (orphan) vì không thể tham chiếu ngược về bảng cha. Do đó ràng buộc Foreign Key sẽ đảm bảo điều đó không xảy ra. Nếu muốn xóa dữ liệu trong bảng cha thì trước hết bạn phải xóa hay vô hiệu hóa ràng buộc Foreign Key trong bảng

con trước.

Cú pháp:

[CONSTRAINT tên_ràng_buộc]

FOREIGN KEY[(danh_sách_trường)] REFERENCES tên_bảng_tham_chiếu(danh_sách_trường_tham_chiếu)

[ON DELETE CASCADE|NO ACTION|SET NULL|SET DEFAULT]

[ON UPDATE CASCADE|NO ACTION|SET NULL|SET DEFAULT]

Cách thức xử lý đối với các bản ghi trong bảng được định nghĩa trong trường hợp

các bản ghi được tham chiếu trong bảng tham chiếu bị xoá (ON DELETE) hay

cập nhật (ON UPDATE). SQL chuẩn đưa ra 4 cách xử lý:

- CASCADE: Tự động xoá (cập nhật) nếu bản ghi được tham chiếu bị xoá (cập nhật).

- NO ACTION: (Mặc định) Nếu bản ghi trong bảng tham chiếu đang được tham

chiếu bởi một bản ghi bất kỳ trong bảng được định nghĩa thì bản ghi đó không được

phép xoá hoặc cập nhật (đối với trường được tham chiếu).

- SET NULL: Cập nhật lại khoá ngoài của bản ghi thành giá trị NULL (nếu trường

cho phép nhận giá trị NULL).

- SET DEFAULT: Cập nhật lại khoá ngoài của bản ghi nhận giá trị mặc định (nếu

trường có qui định giá trị mặc định).

Ví dụ: Tạo bảng thí sinh use qlts CREATE TABLE thisinh

(sbd varchar(20) not null primary key,

hoten text null, ngaysinh datetime null,

gioitinh bit default(0) not null,

quequan text null, dtoan float null,

dly float null,

55

Tập bài giảng SQL Server

dhoa float null, maut nvarchar(20) constraint fk_utien

foreign key references uutien(maut)

on delete cascade

on update cascade,

man nvarchar(20) constraint fk_man foreign key references nganh(man)

on delete cascade

on update cascade,

sophong int null

)

6) Ràng buộc duy nhất (Unique constraints) Ràng buộc duy nhất tương tự như ràng buộc khóa chính nhưng chỉ yêu cầu giá trị

duy nhất chứa trong trường của mỗi bảng dữ liệu. Khi thiết lập ràng buộc duy nhất cho

một trường thì giá trị trong trường là duy nhất. Do đó, khi thêm và sửa bản ghi mà giá

trị trường bị trùng lặp thì SQL Server sẽ thông báo lỗi.

Cú pháp

[CONSTRAINT tên_ràng_buộc]UNIQUE[(danh_sách_trường)]

Ví dụ 1: Tạo bảng khách hàng trong đó trường điện thoại không được trùng nhau.

use qlmbh

CREATE TABLE Khachhang

(makh varchar(20) not null primary key,

hoten text null,

ngaysinh datetime null, gioitinh bit not null,

diachi text null,

dienthoai varchar(15) not null UNIQUE ) Ví dụ 2: Tạo trường điện thoại không được trùng nhau khi đã có bảng khách hàng.

use qlmbh

alter table khachhang add constraint uq_dt unique(dienthoai)

7) Ràng buộc kiểm tra (Check constraints)

Ràng buộc kiểm tra được sử dụng nhằm xác định điều kiện hợp lệ đối với dữ liệu. Khi có sự thay đổi dữ liệu trên bảng (INSERT, UPDATE), những ràng buộc này sẽ

được sử dụng nhằm kiểm tra xem dữ liệu mới có hợp lệ hay không.

56

Tập bài giảng SQL Server

Cú pháp: [CONSTRAINT tên_ràng_buộc] CHECK(các_điều_kiện)

Ví dụ: Thiết lập ràng buộc kiểm tra cho 3 trường điểm toán, điểm lý, điểm hóa khi

đã có bảng thí sinh.

Cách 1: use qlts Alter table thisinh add constraint check_dtoan check(dtoan>=0 and dtoan<=10),

constraint check_dly check(dly in(0,1,2,3,4,5,6,7,8,9,10)),

constraint check_dhoa check(dhoa>=0 and dhoa<=10)

Cách 2:

use qlts Alter table thisinh

add constraint check_diem check((dtoan>=0 and dtoan<=10) and (dly

in(0,1,2,3,4,5,6,7,8,9,10)) and (dhoa>=0 and dhoa<=10))

8) Ràng buộc mặc nhiên (Default constraints)

Ràng buộc mặc nhiên giúp cho bảng có dữ liệu phù hợp ngay cả khi không được

người dùng nhập dữ liệu. Ràng buộc mặc nhiên được thiết lập bằng cách gắn một giá

trị mặc nhiên cho một trường nào đó. Giá trị mặc nhiên chỉ được dùng cho trường hợp

thêm bản ghi, không quan tâm đến việc cập nhật hay xóa.

Nếu giá trị đưa vào là rỗng thì giá trị mặc nhiên được sử dụng. Ngược lại, giá trị

mặc nhiên không được sử dụng.

Cú pháp:

[][CONSTRAINT tên_ràng_buộc]DEFAULT

[For ]

Ví dụ: Tạo bảng mua bán trong đó trường mua bán có giá trị mặc định là 0, trường

ngày mua bán có giá trị mặc định là ngày hiện tại.

use qlmbh CREATE TABLE Muaban

(makh varchar(20) not null

mamh varchar(20) not null, soluong float,

dongia float,

muaban bit DEFAULT 0, ngaymb datetime DEFAULT Getdate() ,

dienthoai varchar(15) not null UNIQUE)

57

Tập bài giảng SQL Server 2.3. Ngôn ngữ thao tác dữ liệu

Ngôn ngữ thao tác dữ liệu bao gồm các câu lệnh: SELECT, INSERT,

UPDATE, DELETE, dùng để thao tác với dữ liệu trong bảng.

Các câu lệnh trong ngôn ngữ thao tác dữ liệu:

- Câu lệnh SELECT - Câu lệnh INSERT - Câu lệnh UPDATE - Câu lệnh DELETE

2.3.1. Câu lệnh SELECT Tác dụng: Dùng để lọc các mẩu tin.

Cú pháp:

SELECT distinct [  ]

FROM

WHERE

GROUPE BY

HAVING

ORDER BY < tên_trường  số_thứ_tự_trường  biểu_thức>,  [ASC/ DESC ]

Ví dụ: Đưa ra các thông tin gồm : Mã mặt hàng, tên mặt hàng, tổng số lượng, thành

tiền của mỗi mặt hàng đã được bán với tổng số lượng lớn hơn 50. Danh sách sắp xếp

theo chiều giảm dần của thành tiền.

use qlmbh

select Mathang.mamh, Mathang.tenmh, sum(muaban.soluong) as tongsl,

SUM(soluong*dongia) as thanhtien

from Mathang, Muaban

where Mathang.mamh=Muaban.mamh and muaban.muaban=1

group by Mathang.mamh, Mathang.tenmh having sum(muaban.soluong)>50 order by thanhtien desc

1) Mệnh đề Select:

Câu lệnh SELECT được sử dụng để chỉ định các trường, các biểu thức cần hiển thị trong các trường của kết quả truy vấn. Các trường, các biểu thức được chỉ định ngay sau từ khoá SELECT và phân cách nhau bởi dấu phẩy. Dùng dấu * trong câu

lệnh Select để chọn hết tất cả các trường.

Nếu truy vấn được thực hiện trên nhiều bảng/View và trong các bảng/View có các trường trùng tên thì tên của những trường này nếu xuất hiện trong danh sách

chọn phải được viết dưới dạng: tên_bảng.tên_trường.

58

Tập bài giảng SQL Server

Trong kết quả truy vấn, tiêu đề của các trường mặc định sẽ là tên của các trường tương ứng trong bảng. Tuy nhiên, để các tiêu đề trở nên thân thiện hơn, ta có thể đổi

tên các tiêu đề của các trường. Để đặt tiêu đề cho một trường nào đó, ta sử dụng cách

viết:

- Cách 1: Tiêu_đề_trường = tên_trường - Cách 2: Tên_trường AS tiêu_đề_trường - Cách 3: Tên_trường tiêu_đề_trường

Ví dụ: Đưa ra các thông tin gồm: số báo danh, họ tên, ngày sinh, quê quán của

mỗi thí sinh.

use qlts

Select 'Số báo danh' = sbd, Hoten as 'Họ tên', ngaysinh 'Ngày sinh',quequan

From Thisinh

Hình 2.3. Kết quả khi xác định tiêu đề trường

2) Mệnh đề FROM

Mệnh đề FROM được sử dụng nhằm chỉ định các bảng và view cần truy xuất

dữ liệu. Sau FROM là danh sách tên của các bảng và view tham gia vào truy vấn, tên

của các bảng và khung nhìn được phân cách nhau bởi dấu phẩy.

3) Mệnh đề WHERE

Mệnh đề WHERE được sử dụng nhằm xác định các điều kiện đối với việc truy

xuất dữ liệu. Sau mệnh đề WHERE là một biểu thức logic và chỉ những dòng dữ liệu

nào thoả mãn điều kiện được chỉ định mới được hiển thị trong kết quả truy vấn.

Mệnh đề where được biểu diễn dạng: WHERE [NOT]

WHERE [NOT] [ NOT ] LIKE WHERE [NOT] [ NOT ] BETWEEN

WHERE [NOT] [ NOT ] IN ()

WHERE [NOT] EXISTS ()

WHERE [NOT] < phép_sánh > ANY  ALL ()

WHERE [NOT] WHERE [NOT]

59

Tập bài giảng SQL Server

WHERE [NOT] ANDORNOT

Ký tự đại diện cho phép toán Like

STT Ký tự Ý nghĩa Ví dụ

Chuỗi ký tự bất kỳ gồm không hoặc 1 % nhiều ký tự

2 _ Một ký tự bất kì

Một ký tự nằm trong giới hạn được [a-f] chỉ một trong các ký tự: 3 [] chỉ định a, b, c, d, e, f

[^a-f] hàm ý chỉ một ký tự Một ký tự không nằm trong giới hạn 4 [^] khác tất cả các ký tự: a, b, c, được chỉ định d, e, f.

Giá trị NULL: Dữ liệu trong một trường cho phép NULL sẽ nhận giá trị NULL

trong các trường hợp sau: Nếu không có dữ liệu được nhập cho trường và không có

mặc định cho trường hay kiểu dữ liệu trên trường đó, người sử dụng trực tiếp đưa giá

trị NULL vào cho trường đó. Một trường có kiểu dữ liệu là kiểu số sẽ chứa giá trị

NULL nếu giá trị được chỉ định gây tràn số. Trong mệnh đề WHERE, để kiểm tra giá

trị của một trường có giá trị NULL hay không, ta sử dụng cách viết:

Cách 1: WHERE tên_trường IS NULL

Cách 2: WHERE tên_trường IS NOT NULL

4) Sắp xếp kết quả truy vấn

Mặc định, các dòng dữ liệu trong kết quả của câu truy vấn tuân theo thứ tự của

chúng trong bảng dữ liệu hoặc được sắp xếp theo chỉ mục (nếu trên bảng có chỉ mục).

Trong trường hợp muốn dữ liệu được sắp xếp theo chiều tăng hoặc giảm của giá trị của

một hoặc nhiều trường, ta sử dụng thêm mệnh đề ORDER BY Sau ORDER BY

là danh sách các trường cần sắp xếp (tối đa là 16 trường). Dữ liệu được sắp xếp có thể

theo chiều tăng (ASC) hoặc giảm (DESC), mặc định là sắp xếp theo chiều tăng. Nếu sau ORDER BY có nhiều trường thì việc sắp xếp dữ liệu sẽ được ưu tiên theo thứ tự từ trái qua phải.

5) Phép hợp (UNION)

Phép hợp được sử dụng trong trường hợp ta cần gộp kết quả của hai hay nhiều truy vấn thành một tập kết quả duy nhất. SQL cung cấp toán tử UNION để thực hiện phép hợp.

Cú pháp: Câu_lệnh_1

UNION [ALL] Câu_lệnh_2

60

Tập bài giảng SQL Server

[UNION [ALL] Câu_lệnh_3] ...

[UNION [ALL] Câu_lệnh_n]

[ORDER BY trường_sắp_xếp]

[COMPUTE danh_sách_hàm_gộp [BY danh_sách_trường]] Trong đó: - câu_lệnh_ 1,…., câu_lệnh_ 1 có dạng:

SELECT danh_sách_trường [INTO tên_bảng_mới]

[FROM danh_sách_bảng|View]

[WHERE điều_kiện]

[GROUP BY danh_sách_trường]

[HAVING điều_kiện]

- Mệnh đề ORDER BY và COMPUTE dùng để sắp xếp kết quả truy vấn hoặc

tính toán các giá trị thống kê chỉ được sử dụng ở cuối câu lệnh UNION. Chúng

không được sử dụng ở trong bất kỳ truy vấn thành phần nào.

Mặc định, nếu trong các truy vấn thành phần của phép hợp xuất hiện những

dòng dữ liệu giống nhau thì trong kết quả truy vấn chỉ giữ lại một dòng. Nếu muốn giữ

lại các dòng này, ta phải sử dụng thêm từ khoá ALL trong truy vấn thành phần.

Các nguyên tắc khi sử dụng toán tử UNION:

- Danh sách trường trong các truy vấn thành phần phải có cùng số lượng.

- Các trường tương ứng trong tất cả các bảng, hoặc tập con bất kỳ các trường

được sử dụng trong bản thân mỗi truy vấn thành phần phải cùng kiểu dữ liệu.

- Các trường tương ứng trong bản thân từng truy vấn thành phần của một câu

lệnh UNION phải xuất hiện theo thứ tự như nhau. Nguyên nhân là do phép hợp so sánh các trường từng trường một theo thứ tự được cho trong mỗi truy vấn.

- Khi các kiểu dữ liệu khác nhau được kết hợp với nhau trong câu lệnh UNION,

chúng sẽ được chuyển sang kiểu dữ liệu cao hơn (nếu có thể được). Tiêu đề trường trong kết quả của phép hợp sẽ là tiêu đề trường được chỉ định trong truy vấn đầu tiên. - Phép toán UNION có thể được sử dụng bên trong câu lệnh INSERT.

- Phép toán UNION không được sử dụng trong câu lệnh CREATE VIEW.

Ví dụ: Đưa ra các thông tin gồm: số báo danh, họ tên, ngày sinh, quê quán của

những thí sinh có quê quán „Nam Định‟ hoặc „Thái Bình‟.

use qlts

select sbd, hoten, ngaysinh, quequan from Thisinh

where quequan='Nam Dinh'

61

Tập bài giảng SQL Server

union select sbd, hoten, ngaysinh, quequan

from Thisinh

where quequan='Thai Binh'

6) Phép kết nối

Khi cần thực hiện một yêu cầu truy vấn dữ liệu từ hai hay nhiều bảng, ta phải sử dụng đến phép kết nối. Một câu lệnh nối kết hợp các dòng dữ liệu trong các bảng khác nhau lại theo một hoặc nhiều điều kiện nào đó và hiển thị chúng trong kết quả

truy vấn. Phép kết nối là cơ sở để thực hiện các yêu cầu truy vấn dữ liệu liên quan đến

nhiều bảng. Một câu lệnh kết nối thực hiện lấy các dòng dữ liệu trong các bảng tham

gia truy vấn, so sánh giá trị của các dòng này trên một hoặc nhiều trường được chỉ

định trong điều kiện nối và kết hợp các dòng thoả mãn điều kiện thành những dòng trong kết quả truy vấn.

Để thực hiện được một phép kết nối, cần phải xác định được những yếu tố sau:

- Những trường nào cần hiển thị trong kết quả truy vấn.

- Những bảng nào có tham gia vào truy vấn.

- Điều kiện để thực hiện phép nối giữa các bảng dữ liệu là gì.

Các loại phép nối

- Phép kết nối trong (inner join)

+ Phép nối bằng: Một phép nối bằng (equi-join) là một phép nối trong đó giá trị

của các trường được sử dụng để nối được so sánh với nhau dựa trên tiêu chuẩn bằng và

tất cả các trường trong các bảng tham gia nối đều được đưa ra trong kết quả. Một dạng

đặc biệt của phép nối bằng được sử dụng nhiều là phép nối tự nhiên (natural-join).

Trong phép nối tự nhiên, điều kiện nối giữa hai bảng chính là điều kiện bằng giữa khoá ngoài và khoá chính của hai bảng. Trong danh sách chọn của câu lệnh chỉ giữ lại một

trường trong hai trường tham gia vào điều kiện của phép nối.

+ Phép tự nối: là phép nối mà trong đó điều kiện nối được chỉ định liên quan đến các trường của cùng một bảng. Trong trường hợp này, sẽ có sự xuất hiện tên của cùng một bảng nhiều lần trong mệnh đề FROM và do đó các bảng cần phải

được đặt bí danh.

Cú pháp + Cách 1: Đặt sau mệnh đề Where

tên_bảng_1.tên_trường=tên_bảng_2.tên_trường

+ Cách 2: Đặt sau mệnh đề From tên_bảng_1 [INNER] JOIN tên_bảng_2 ON điều_kiện_nối

62

Tập bài giảng SQL Server

Ví du: Đưa ra các thông tin gồm: số báo danh, họ tên, ngày sinh, quê quán của

những thí sinh có quê quán „Nam Định‟ hoặc „Thái Bình‟.

Cách 1:

use qlts

select sbd, hoten, ngaysinh, quequan, tenn from Thisinh, Nganh where Thisinh.man=Nganh.man Cách 2:

use qlts

select sbd, hoten, ngaysinh, quequan, tenn

from Thisinh inner join Nganh on Thisinh.man=Nganh.man

- Phép nối ngoài: Với phép kết nối trong, chỉ những dòng có giá trị trong các trường được chỉ định thoả mãn điều kiện kết nối mới được hiển thị trong kết quả truy

vấn. Phép kết nối trong đã loại bỏ thông tin chứa trong những dòng không thoả mãn

điều kiện nối. Tuy nhiên, đôi khi ta cũng cần giữ lại những thông tin này bằng cách

cho phép những dòng không thoả mãn điều kiện nối có mặt trong kết quả của phép

nối. Để làm điều này, ta có thể sử dụng phép nối ngoài. SQL Server cung cấp các loại

phép nối ngoài sau:

+ Phép nối ngoài trái (LEFT OUTER JOIN)

+ Phép nối ngoài phải (RIGHT OUTER JOIN)

+ Phép nối ngoài đầy đủ (FULL OUTER JOIN)

Cú pháp:

tên_bảng_1 LEFT|RIGHT|FULL [OUTER] JOIN tên_bảng_2 ON

điều_kiện_nối

Ví dụ: Đưa ra thông tin các ngành không có thí sinh đăng kí dự thi

use qlts

select Nganh.man,Nganh.tenn,Nganh.chitieu,sbd from Nganh left outer join Thisinh on Nganh.man=Thisinh.man where thisinh.man is NULL

7) Mệnh đề GROUP BY

Mệnh đề GROUP BY sử dụng trong câu lệnh SELECT nhằm phân hoạch các dòng dữ liệu trong bảng thành các nhóm dữ liệu, và trên mỗi nhóm dữ liệu thực hiện

tính toán các giá trị thống kê như tính tổng, tính giá trị trung bình,...

Các hàm gộp (aggregate functions) được sử dụng để tính giá trị thống kê cho toàn bảng hoặc trên mỗi nhóm dữ liệu. Chúng có thể được sử dụng như là các trường

63

Tập bài giảng SQL Server trong danh sách chọn của câu lệnh SELECT hoặc xuất hiện trong mệnh đề HAVING, nhưng không được phép xuất hiện trong mệnh đề WHERE.

SQL cung cấp các hàm gộp dưới đây:

STT Hàm gộp Chức năng

1 SUM([ALL| DISTINCT] biểu_thức) Tính tổng các giá trị

2 AVG([ALL| DISTINCT] biểu_thức) Tính trung bình của các giá trị

Đếm số các giá trị trong biểu 3 COUNT([ALL|DISTINCT] biểu_thức) thức

4 COUNT(*) Đếm số các dòng được chọn

5 MAX(biểu_thức) Tính giá trị lớn nhất

6 MIN(biểu_thức) Tính giá trị nhỏ nhất

Chú ý:

- Hàm SUM và AVG chỉ làm việc với các biểu thức số.

- Hàm SUM, AVG, COUNT, MIN và MAX bỏ qua các giá trị NULL khi tính toán.

- Hàm COUNT(*) không bỏ qua các giá trị NULL.

- Các hàm gộp thực hiện tính toán thống kê trên toàn bộ dữ liệu. Khi muốn loại

bỏ bớt các giá trị trùng nhau (chỉ giữ lại một giá trị), ta thêm từ khoá DISTINCT ở

trước biểu thức là đối số của hàm.

- Nếu sau mệnh đề SELECT có cả các hàm gộp và những biểu thức không phải

là hàm gộp thì những biểu thức này phải có mặt đầy đủ trong mệnh đề GROUP BY,

nếu không câu lệnh sẽ không hợp lệ.

Thống kê trên toàn bộ dữ liệu: Khi cần tính toán giá trị thống kê trên toàn bộ dữ

liệu, ta sử dụng các hàm gộp trong mệnh đề SELECT. Khi đó, ta không sử dụng bất kỳ một tên trường hay biểu thức nào ngoài các hàm gộp trong mệnh đề SELECT.

Ví dụ 1: Đưa số lượng các thí sinh đăng kí dự thi.

use qlts select COUNT(*) from thisinh

Thống kê trên nhóm: Khi cần thực hiện tính toán các giá trị thống kê trên các nhóm dữ liệu, ta sử dụng mệnh đề GROUP BY để phân hoạch dữ liệu vào trong các

nhóm. Các hàm gộp được sử dụng sẽ thực hiện thao tác tính toán trên mỗi nhóm và cho biết giá trị thống kê theo các nhóm dữ liệu.

Ví dụ 2: Đưa ra các thông tin gồm: Mã ngành, tên ngành, số thí sinh đăng kí dự

thi của mỗi ngành.

SELECT Nganh.man, Nganh.tenn, COUNT(*) AS sots

64

Tập bài giảng SQL Server

FROM Nganh INNER JOIN Thisinh ON Nganh.man=Thisinh.man GROUP BY Nganh.man, Nganh.tenn

Mệnh đề HAVING dùng để xác định điều kiện trong hàm gộp. Mệnh đề

HAVING được sử dụng nhằm chỉ định điều kiện đối với các giá trị thống kê được sản

sinh từ các hàm gộp tương tự như cách thức mệnh đề WHERE thiết lập các điều kiện cho mệnh đề SELECT. Mệnh đề HAVING thường không thực sự có nghĩa nếu như không sử dụng kết hợp với mệnh đề GROUP BY.

Một điểm khác biệt giữa HAVING và WHERE là trong điều kiện của WHERE

không được có các hàm gộp trong khi HAVING lại cho phép sử dụng các hàm gộp

trong điều kiện của mình.

8) Truy vấn con (Subquery)

Truy vấn con là một câu lệnh SELECT được lồng vào bên trong một câu lệnh SELECT, INSERT, UPDATE, DELETE hoặc bên trong một truy vấn con khác. Loại

truy vấn này được sử dụng để biểu diễn cho những truy vấn trong đó điều kiện truy

vấn dữ liệu cần phải sử dụng đến kết quả của một truy vấn khác.

Cú pháp:

(SELECT [ALL | DISTINCT] danh_sách_trường

FROM danh_sách_bảng

[WHERE điều_kiện]

[GROUP BY danh_sách_trường]

[HAVING điều_kiện])

Nguyên tắc khi sử dụng truy vấn con:

- Một truy vấn con phải được viết trong cặp dấu ngoặc. Trong hầu hết

các trường hợp, một truy vấn con thường phải có kết quả là một trường (tức là chỉ có duy nhất một trường trong danh sách chọn).

- Mệnh đề COMPUTE và ORDER BY không được phép sử dụng trong truy

vấn con.

- Các tên trường xuất hiện trong truy vấn con có thể là các trường của các bảng

trong truy vấn ngoài.

Một truy vấn con thường được sử dụng làm điều kiện trong mệnh đề

WHERE hoặc HAVING của một truy vấn khác.

Nếu truy vấn con trả về đúng một giá trị, nó có thể sử dụng như là một thành

phần bên trong một biểu thức (chẳng hạn xuất hiện trong một phép so sánh bằng).

Các lượng từ dùng với truy vấn con: - Lượng từ (ANY|ALL):

Cú pháp:

65

Tập bài giảng SQL Server

WHERE biểu_thức  [ANY|ALL] (truy_vấn_con)

Trong đó ={=, >, <, >=, <=, <>, !=}

+ Lượng từ ALL được sử dụng khi cần so sánh giá trị của biểu thức với tất cả

các giá trị trả về trong kết quả của truy vấn con.

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 có tổng điểm 3 môn lớn nhất.

use qlts

select sbd,hoten,ngaysinh

from Thisinh where dtoan+dly+dhoa>=

all (select dtoan+dly+dhoa from Thisinh)

+ Lượng từ ANY có kết quả đúng khi chỉ cần một giá trị bất kỳ nào đó trong

kết quả của truy vấn con thoả mãn điều kiện.

Ví dụ 2: Đưa ra các thông tin gồm: Mã ngành, tên ngành, chỉ tiêu tuyển sinh

của tất cả các ngành có thí sinh đăng kí dự thi.

use qlts

select man, tenn, chitieu

from Nganh

where man=any (select man from Thisinh)

- Lượng từ IN (NOT IN):

Cú pháp

WHERE biểu_thức [NOT] IN (truy_vấn_con)

+ Lượng từ IN dùng để kiểm tra giá trị của một biểu thức có xuất hiện trong tập

các giá trị của truy vấn con hay không.

Ví dụ 3: Đưa ra các thông tin gồm: Mã ưu tiên, tên ưu tiên, điểm cộng của tất cả

các loại ưu tiên mà có thí sinh được hưởng.

use qlts select maut, tenut, dc

from uutien where maut in (select maut from Thisinh) + Lượng từ NOT IN dùng để kiểm tra giá trị của một biểu thức không xuất hiện

trong tập các giá trị của truy vấn con hay không.

Ví dụ 4: Đưa ra các thông tin gồm: Mã ngành, tên ngành, chỉ tiêu tuyển sinh

của tất cả các ngành không có thí sinh đăng kí dự thi.

use qlts select man, tenn, chitieu

66

Tập bài giảng SQL Server

from Nganh where man not in (select man from Thisinh)

- Lượng từ EXISTS| NOT EXISTS:

Cú pháp:

WHERE [NOT] EXISTS (truy_vấn_con) + Lượng từ EXISTS trả về giá trị True nếu kết quả của truy vấn con có ít nhất một

dòng.

Ví dụ: Kiểm tra xem có thí sinh nào quê „Nam Dinh‟ không.

use qlts

if exists (select * from Thisinh$ where quequan='Nam Dinh')

print 'Co thi sinh que Nam Dinh'

else print 'Khong co thi sinh que Nam Dinh' + Lượng từ NOT EXISTS trả về giá trị False nếu kết quả của truy vấn con không

có dòng nào.

Ví dụ 5: Kiểm tra xem trường có đào tạo ngành „CNTT‟ hoặc „KHMT‟ không.

use qlts

if not exists (select * from nganh where tenn='CNTT' or tenn='KHMT')

print 'Khong dao tao nganh CNTT và KHMT'

else

print 'Co dao tao nganh CNTT và KHMT'

+ Khi sử dụng EXISTS, trong danh sách các thông tin đưa ra của truy vấn con có

thể có nhiều hơn hai trường.

2.3.2. Câu lệnh INSERT Tác dụng: Dùng để đưa các giá trị của trường vào bảng dữ liệu Cú pháp:

- Nhập dữ liệu trực tiếp:

INSERT INTO [( )] VALUES ( )

- Nhập dữ liệu từ bảng khác:

INSERT INTO [( )]

Ví dụ: Thêm một bản ghi vào bảng mặt hàng.

INSERT INTO Mathang

VALUES („MH010‟,‟TIVI‟,‟Trang‟,‟Cai‟)

2.3.3. Câu lệnh UPDATE Tác dụng: Lệnh UPDATE dùng để chỉnh sửa dữ liệu trong bảng

67

Tập bài giảng SQL Server

Cú pháp:

UPDATE

SET

[WHERE ]

Trong đó:

Table_Name: là tên bảng mà dữ liệu trong đó được thay đổi. Column_name: là tên trường dữ liệu được thay đổi. Value: là giá trị dữ liệu thay đổi.

Search_condition: là điều kiện thỏa mãn mà các dữ liệu sẽ thay đổi.

Ví dụ: Tăng đơn giá của các mặt hàng đã được mua có đơn giá nhỏ hơn 50 lên 1%.

use qlmbh

UPDATE muaban SET dongia=dongia+dongia*0.1

WHERE dongia<50 and muaban=0

2.3.4. Câu lệnh DELETE Tác dụng: Câu lệnh DELETE dùng để xóa các hàng dữ liệu trong bảng

Cú pháp:

DELETE FROM

[WHERE ]

Trong đó:

Table_Name: Xác định tên bảng có dữ liệu cần xóa.

Mệnh đề WHERE chỉ định điều kiện.

Ví dụ 1: Xóa những mặt hàng có màu xanh.

DELETE FROM mathang

WHERE mau=‟xanh‟

Nếu mệnh đề WHERE không có trong câu lệnh DELETE, tất cả các bản ghi trong bảng sẽ bị xóa. Thay vì sử dụng câu lệnh DELETE trong trường hợp này, ta có thể sử dụng câu lệnh TRUNCATE:

Cú pháp:

TRUNCATE TABLE tên_bảng Ví dụ 1: Xóa tất cả các bản ghi trong bảng mặt hàng.

TRUNCATE TABLE mathang

68

Tập bài giảng SQL Server

2.4. Ngôn ngữ điều khiển dữ liệu

Ngôn ngữ điều khiển dữ liệu dùng để thiết lập quyền truy cập trên các đối tượng cơ

sở dữ liệu. Ngôn ngữ điều khiển dữ liệu được sử dụng để bảo mật cơ sở dữ liệu. Các

quyền được điều khiển bằng cách sử dụng các câu lệnh GRANT, REVOKE và DENY.

2.4.1. Câu lệnh GRANT Tác dụng: Đặc quyền Grant được sử dụng khi cơ sở dữ liệu được chia sẻ với các

người dùng khác.

Cú pháp:

GRANT

{ALL | statement[,...]}

ON Table_Name

TO Security_Account [,...]

Trong đó:

ALL: gán tất cả các quyền cho đối tượng với người dùng đó

Statement : các lệnh được gán cho người dùng đó

TO Security_Account: quyền sẽ được gán cho người dùng này

Table_Name : tên của bảng mà các đặc quyền được đưa ra

Ví dụ: Gán quyền SELECT cho người dùng JOHN trên bảng Employee trong cơ sở

dữ liệu AdventureWorks

GRANT SELECT

ON Employee

TO JOHN

2.4.2. Câu lệnh REVOKE Tác dụng: Lệnh REVOKE dùng để xóa các quyền đã gán trên các đối tượng của

người dùng trong cơ sở dữ liệu hiện hành

Cú pháp:

REVOKE {ALL | statement[,...]} ON Table_Name FROM Security_Account [,...]

Ví dụ: Xóa quyền SELECT trên bảng Employee của người dùng JOHN trong cơ sở

dữ liệu AdventureWorks

REVOKE SELECT ON Employee

FROM JOHN

69

Tập bài giảng SQL Server

2.4.3. Câu lệnh DENY Tác dụng: Lệnh DENY dùng để ngăn quyền của người dùng

Cú pháp:

DENY

{ALL | statement[,...]} ON Table_Name TO Security_Account [,...]

Ví dụ: Ngăn quyền SELECT của người dùng JOHN đối với bảng Employee

trong cơ sở dữ liệu AdventureWorks

DENY SELECT

ON Employee

FROM JOHN

2.5. Thực thi T-SQL

SQL Server 2008 cung cấp một vài cách để thực thi các câu lệnh Transact-SQL.

Các câu lệnh có thể được thực thi như là các câu lệnh đơn hoặc như một lô.

- Các câu lệnh đơn: Xử lý câu lệnh đơn là cách phổ biến mà SQL Server 2008

thực thi các câu lệnh

Ví dụ 1:

SELECT * FROM Thisinh

- Xử lý lô:

+ Một lô là một tập hợp của một hoặc nhiều câu lệnh Transact-SQL được kết thúc

bằng từ khóa Go và được gửi cùng một thời điểm từ một ứng dụng đến SQL Server để

thực thi.

+ Các câu lệnh này được biên dịch thành một đơn vị thực thi và được gọi là

“execution plan”.

+ Các câu lệnh trong “execution plan” được thực hiện cùng một lúc.

70

Tập bài giảng SQL Server

- Scripts: Các câu lệnh SQL có thể được thực thi trong script bằng cách lưu trên tập tin. Phần mở rộng của file thường lưu dưới dạng *.sql . Tập tin sẽ được đọc khi được

yêu cầu để thực thi.

Ví dụ 2:

Hình 2.4. Tạo một script

71

Tập bài giảng SQL Server

Chƣơng 3 QUẢN LÝ CƠ SỞ DỮ LIỆU

3.1. Cơ sở dữ liệu

3.1.1. Các hệ thống cơ sở dữ liệu

SQL Server được tổ chức theo cơ sở dữ liệu quan hệ. SQL Server 2008 hỗ trợ

ba loại cơ sở dữ liệu: Cơ sở dữ liệu hệ thống, cơ sở dữ liệu người dùng định nghĩa, cơ sở dữ liệu mẫu.

1) Cơ sở dữ liệu hệ thống: Được tạo ra bởi SQL Server. Các cơ sở dữ liệu này

được sử dụng để lưu thông tin về SQL Server 2008. Hơn nữa, các cơ sở dữ liệu này

còn được sử dụng để quản lý các cơ sở dữ liệu người dùng. Các cơ sở dữ liệu hệ thống

được hỗ trợ bởi SQL Server 2008 là master, model, msdb, tempdb và được đặt trong ngăn System Database.

Hình 3.1. Cơ sở dữ liệu hệ thống

TT Cơ sở dữ liệu Mô tả

1 master Cơ sở dữ liệu này lưu trữ các tất cả các thông tin ở mức hệ thống của một nhân bản SQL Server.

Cơ sở dữ liệu này được sử dụng bởi SQL Server Agent để

2 msdb

nhắc nhở các công tác thực hiện theo lịch biểu và các công việc khác.

3 model Cơ sở dữ liệu này được sử dụng như cơ sở dữ liệu mẫu cho tất cả các cơ sở dữ liệu được tạo ra trong một nhân bản cụ thể

của SQL Server 2008.

Cơ sở dữ liệu này lưu trữ các đối được tạm và các tập kết quả 4 Tempdb trung gian

72

Tập bài giảng SQL Server

Người dùng không được phép cập nhật thông tin trực tiếp vào các đối tượng cơ sở dữ liệu hệ thống, như là các bảng hệ thống, các thủ tục lưu trữ hệ thống, và các

khung nhìn danh mục. Nhưng người sử dụng có thể sử dụng các công cụ quản trị cho

phép họ quản trị hệ thống và quản lý tất cả các người sử dụng và các đối tượng cơ sở

dữ liệu. Đó là:

- SQL Server Management Studio - SQL Server Management Objects (SMO): Giao diện lập trình ứng dụng với

các đối tượng quản lý SQL Server

- Transact-SQL scripts and stored procedures: sử dụng các thủ tục lưu trữ hệ

thống và các phát biểu ngôn ngữ truy vấn dữ liệu Transact-SQL

Hình 3.2. Thay đổi dữ liệu hệ thống

Các ứng dụng cơ sở dữ liệu có thể xác định danh mục và thông tin hệ thống

bằng cách sử dụng các tiếp cận sau đây: - Khung nhìn danh mục hệ thống.

- Các đối tượng quản lý SQL Server.

- Các hàm danh mục, các phương thức, các thuộc tính, hoặc các tính chất của

giao diện lập trình ứng dụng cơ sở dữ liệu.

- Các thủ tục lưu trữ và các hàm.

Hình 3.3. Xem dữ liệu hệ thống

2) Cơ sở dữ liệu người dùng định nghĩa: Người sử dụng SQL Server 2008 có thể tạo các cơ sở dữ liệu người dùng định nghĩa. Mục đích của các cơ sở dữ liệu này là để lưu dữ liệu của người sử dụng. Kích thước của cơ sở dữ liệu có thể được mở rộng

hoặc bị co lại. Khi một cơ sở dữ liệu người dùng không cần thiết nữa, nó có thể bị hủy bỏ. Hình 3.4 dưới đây chỉ ra cơ sở dữ liệu QLTS (Quản lý tuyển sinh) do người dùng

tạo ra.

73

Tập bài giảng SQL Server

Hình 3.4. Cơ sở dữ liệu do người dùng tạo ra

3) Cơ sở dữ liệu mẫu: SQL Server cung cấp các cơ sở dữ liệu mẫu để người sử dụng làm việc với SQL Server 2008. Một cơ sở dữ liệu mẫu được giới thiệu trong SQL

Server 2008 là AdventureWorks.

3.1.2. Tạo cơ sở dữ liệu

Có ba cách chính để tạo cơ sở dữ liệu trong SQL Server: sử dụng chức năng của

công cụ Management Studio (MS); câu lệnh SQL; bằng ngôn ngữ Visual C#, VB, hay

C++ với đối tượng SQL Server Management Object (SMO). Mặc định cơ sở dữ liệu

mới tạo ra sẽ có hai tập tin: Tập tin lưu trữ dữ liệu có tên mở rộng là .mdf, tập tin ghi

lại thông tin liên quan đến thao tác dữ liệu có tên mở rộng là .log. Trong trường hợp cơ

sở dữ liệu dùng cho mục đích kinh doanh nào đó sẽ có khả năng chứa dung lượng lớn.

Do đó, có thể tạo nhiều tập tin dữ liệu thay vì chỉ một tập tin là .mdf. Bằng cách tạo ra

nhiều tập tin thứ cấp có tên mở rộng là .ndf cho một cơ sở dữ liệu, ta có thể di chuyển hay sao chép tệp tin dễ dàng hơn so với một tệp tin.

1) Tạo cơ sở dữ liệu bằng công cụ MS

Các bước chính

Bước 1: Chọn Database/Chọn chuột phải/Chọn New Database.

74

Tập bài giảng SQL Server

Hình 3.5. Tạo cơ sở dữ liệu

Bước 2: Nhập tên cơ sở dữ liệu tại mục Database Name.

Hình 3.6. Nhập tên cơ sở dữ liệu

Bước 3: Chọn tài khoản bằng cách chọn nút

tại mục Owner và nhập tên tài khoản vào mục Enter the Object names to select. Chọn nút Check Names để kiểm tra tài khoản này có tồn tại không. Sau đó chọn nút OK.

75

Tập bài giảng SQL Server

Hình 3.7. Chọn tài khoản

Owner là chủ nhân của cơ sở dữ liệu. Ta nên chọn tài khoản làm chủ nhân cho cơ sở dữ liệu thay vì dùng mặc định. là bí danh của tài khoản mà ta dùng để đăng nhập vào SQL Server.

Bước 4: Thay đổi vị trí lưu tập tin .mdf và .log. Chọn nút tại trường Path.

Hình 3.8. Thay đổi vị trí lưu tập tin

Bước 5: Chọn thư mục chứa tập tin: Chọn đường dẫn/OK. Mặc định vị trí lưu

trữ tập tin của cơ sở dữ liệu do người sử dụng tạo ra trong thư mục “C:\Program Files\Microsoft SQL Server\MSSQL10.SQLSERVER2\MSSQL\DATA”.

76

Tập bài giảng SQL Server

Hình 3.9. Chọn thư mục chứa tập tin Bước 6: Tạo tệp tin thứ cấp. Chọn nút Add/nhập tên cho tập tin thứ cấp.

Hình 3.10. Nhập tên tập tin thứ cấp

Bước 7: Khai báo dung lượng ban đầu cho cơ sở dữ liệu. Nhập dung lượng tại

trường Initial Size/OK.

77

Tập bài giảng SQL Server

Hình 3.11. Khai báo dung lượng ban đầu

Bước 8: Khai báo tự động tăng dung lượng. Chọn nút tại trường

Autogrowth/ Chọn các thông số cần thiết/OK.

Hình 3.12. Khai báo tự động tăng dung lượng

Bước 9: Chọn OK. Khi đó, cơ sở dữ liệu sẽ được tạo ra.

Hình 3.13. Cơ sở dữ liệu mới tạo

78

Tập bài giảng SQL Server

2) Tạo cơ sở dữ liệu bằ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

Hình 3.14. Cửa sổ New Query

Bước 2: Khai báo câu lệnh tạo cơ sở dữ liệu.

Hình 3.15. Khai báo câu 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 tạo cơ sở dữ liệu.

Hình 3.16. Thực thi câu lệnh T-SQL

3.1.3. Cấu trúc cơ sở dữ liệu

Mỗi cơ sở dữ liệu sau khi tạo đều có các thành phần: Tables, Database

Diagrams, View, Synonyms, Programmability, Service Broker, Storage, Security.

79

Tập bài giảng SQL Server

Hình 3.17. Cấu trúc cơ sở dữ liệu

3.1.4. Sửa tên cơ sở dữ liệu

Bước 1: Chọn tên cơ sở dữ liệu/Chọn chuột phải/Chọn Rename.

Bước 2: Nhập tên mới.

3.1.5. Xoá cơ sở dữ liệu

Đôi khi ta muốn xóa bỏ cơ sở dữ liệu đã tạo, ta có thể xóa dễ dàng. Nhưng sau

khi đã xóa cơ sở dữ liệu, ta chỉ có thể lấy lại nó từ bản sao lưu. Chính vì vậy, ta phải

thường xuyên thực hiện sao lưu cơ sở dữ liệu trước khi thực hiện bất kỳ hoạt động sửa

đổi hay xóa bỏ nó cho an toàn.

1) Xóa cơ sở dữ liệu bằng công cụ MS

Bước 1: Chọn tên cơ sở dữ liệu/Chọn chuột phải/Chọn Delete.

Hình 3.18. Xóa cơ sở dữ liệu

Bước 2: Chọn các thông số cần thiết/Chọn OK

80

Tập bài giảng SQL Server

Hình 3.19. Xác nhận xóa cơ sở dữ liệu

2) Xóa cơ sở dữ liệu bằ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: Khai báo câu lệnh xóa cơ sở dữ liệu (Drop Database).

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óa cơ sở dữ liệu.

3.1.6. Quản lý dung lượng cơ sở dữ liệu

Dung lượng của cơ sở dữ liệu có thể dư thừa trong quá trình được tạo ra và sử

dụng. Chức năng Shink cơ sở dữ liệu cho phép giảm dung lượng dư thừa quá mức.

Ngoài ra, chức năng Shink còn cho phép tự động tăng dung lượng cho cơ sở dữ liệu

khi cần thiết.

Các bước:

Bước 1: Chọn tên cơ sở dữ liệu/Chọn chuột phải/Chọn Tasks/Chọn Shink/Chọn Database.

Hình 3.20. Loại bỏ dung lượng cơ sở dữ liệu dư thừa

81

Tập bài giảng SQL Server

Bước 2: Đánh dấu vào tùy chọn “Rrorganize files before releasing unused space. Selecting the option may affect performance” để tổ chức lại cơ sở dữ liệu trước

khi loại bỏ dung lương dư thừa/Chọn OK.

Hình 3.21. Thiết lập thông số cho chức năng Shink

3.2. Bảng dữ liệu

3.2.1. Tạo cấu trúc bảng

Bảng là đối tượng cơ sở dữ liệu chứa dữ liệu trong cơ sở dữ liệu. cấu trúc của

bảng được thể hiện bằng trường (trường) và dữ liệu được tổ chức theo hàng (bản ghi).

Bảng trong cơ sở dữ liệu SQL Server có hai loại: Bảng hệ thống nằm trong mục

System Tables, bảng do người dùng tạo ra.

Hình 3.22. Bảng trong cơ sở dữ liệu

- Dùng công cụ MS

82

Tập bài giảng SQL Server

Bước 1: Chọn tên cơ sở dữ liệu/Chọn Tables/Chọn chuột phải/Chọn New

Table.

Hình 3.23. Tạo bảng dữ liệu Bước 2: Nhập tên trường dữ liệu/Chọn kiểu dữ liệu.

Hình 3.24. Thiết kế bảng dữ liệu

Bước 3: Chọn nút Save trên thanh công cụ/Nhập tên bảng/Chọn OK.

Hình 3.25. Đặt tên bảng dữ liệu

- Dùng câu lệnh T-SQL

, xuất hiện cửa sổ New Query

Bước 1: Chọn nút New Query Bước 2: Khai báo câu lệnh tạo bảng dữ liệu (Create Table).

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 bảng dữ liệu.

83

Tập bài giảng SQL Server

3.2.2. Thao tác với các ràng buộc dữ liệu

Có hai cách để tạo các ràng buộc: Dùng công cụ MS, hoặc dùng câu lệnh T-

SQL. Tuy nhiên, ở đây chỉ trình bày phương pháp dùng công cụ MS còn phương pháp

dùng câu lệnh T-SQL thì tương tự như các phần trên.

1) Ràng buộc khóa chính (Primary Key constraints) - Tạo ràng buộc khóa chính: Bước 1: Chọn tên bảng/Chọn chuột phải/Chọn Design.

Hình 3.26. Mở bảng ở chế độ Design

Bước 2: Chọn tên trường/Chọn chuột phải/Chọn Set Primary Key

Hình 3.27. Tạo ràng buộc khóa chính

- Xóa ràng buộc khóa chính: Chọn trường là khóa chính cần xóa, rồi chọn

Remove Primary Key.

2) Ràng buộc khóa ngoại (Foreign Key constraints) - Tạo ràng buộc khóa ngoại: Bước 1: Chọn tên bảng/Chọn Keys/Chọn chuột phải/Chọn New Foreign Key.

84

Tập bài giảng SQL Server

Hình 3.28. Tạo ràng buộc khóa ngoại

Bước 2: Nhập tên cho ràng buộc tại mục Name

Hình 3.29. Nhập tên cho ràng buộc khóa ngoại

Bước 3: Chọn nút … tại mục Tables And Columns Specific/ Chọn bảng và

trường của khóa chính/Chọn bảng và trường khóa ngoại/Chọn OK.

Hình 3.30. Chọn trường cho khóa chính-khóa ngoại

Bước 4: Chọn chế độ Cascade tại mục Delete Rule và mục Update Rule/Close

85

Tập bài giảng SQL Server

Hình 3.31. Chọn chế độ Delete và Update Kết quả sau khi tạo được ràng buộc khóa chính, khóa ngoại

Hình 3.32. Kết quả sau tạo ràng buộc khóa ngoại và khóa ngoại

- Xóa ràng buộc khóa ngoại: Chọn tên ràng buộc khóa ngoại/Chọn Delete/Chọn OK.

3) Ràng buộc duy nhất (Unique constraints)

- Tạo ràng buộc duy nhất:

Bước 1: Chọn tên bảng/Chọn Indexes/Chọn New Index.

Hình 3.33. Tạo ràng buộc duy nhất

Bước 2: Nhập tên ràng buộc tại mục Index Name/Chọn loại Index tại mục

Index Type/Đánh dấu mục chọn Unique/Chọn nút Add.

86

Tập bài giảng SQL Server

Hình 3.34. Nhập tên cho ràng buộc duy nhất Bước 3: Chọn đánh dấu vào trường cần tạo ràng buộc/chọn OK/Chọn OK.

Hình 3.35. Chọn trường cần tạo ràng buộc duy nhất

Kết quả sau khi tạo được ràng buộc duy nhất

Hình 3.36. Kết quả tạo ràng buộc duy nhất

- Xóa ràng buộc duy nhất: Chọn tên ràng buộc duy nhất/Chọn Delete/Chọn OK. 4) Ràng buộc kiểm tra (Check constraints)

- Tạo ràng buộc kiểm tra:

87

Tập bài giảng SQL Server

Bước 1: Chọn tên bảng/Chọn Constraints/Chọn chuột phải/Chọn New

Constraints.

Hình 3.37. Tạo ràng buộc kiểm tra

Bước 2: Nhập tên cho ràng buộc tại mục Name/ Chọn nút … tại mục

Expresstion.

Hình 3.38. Nhập tên cho ràng buộc kiểm tra

Bước 3: Nhập điều kiện ràng buộc/Chọn OK

Hình 3.39. Nhập điều kiện cho ràng buộc kiểm tra

Kết quả sau khi tạo được ràng buộc kiểm tra

88

Tập bài giảng SQL Server

Hình 3.40. Kết quả tạo ràng buộc kiểm tra

- Xóa ràng buộc kiểm tra: Chọn tên ràng buộc kiểm tra/Chọn Delete/Chọn OK.

5) Ràng buộc mặc nhiên (Default constraints)

Chọn tên trường cần tạo ràng buộc mặc nhiên/Nhập giá trị mặc định tại mục

Default Value or Binding.

Hình 3.41. Tạo ràng buộc mặc định

Kết quả sau khi tạo được ràng buộc mặc định

Hình 3.42. Kết quả tạo ràng buộc mặc định

- Xóa ràng buộc mặc định: Chọn tên ràng buộc mặc định/Chọn Delete/Chọn OK.

89

Tập bài giảng SQL Server

3.2.3. Thao tác với bảng dữ liệu

1) Kết nối các bảng dữ liệu

Sau khi thiết các bảng dữ liệu thành công, chúng ta có thể tạo kết nối giữa các

bảng dữ liệu với nhau.

Bước 1: Chọn cơ sở dữ liệu/Chọn Database Diagrams/Chọn New Database

Diagrams.

Hình 3.43. Tạo kết nối giữa các bảng

Bước 2: Chọn bảng/Chọn nút Add. Khi chọn xong các bảng cần tạo kết nối thì

chọn nút Close.

Hình 3.44. Chọn các bảng dữ liệu

Bước 3: Chọn trường kết nối của bảng thứ nhất kéo thả vào trường kết nối của

bảng thứ 2.

90

Tập bài giảng SQL Server

Hình 3.45. Tạo kết nối

Bước 4: Kiểm tra trường kết nối/ Chọn OK.

Hình 3.46. Kiểm tra trường kết nối

Bước 5: Xác nhận mối kết nối/ Chọn OK. Khi đó, mối kết nối giữa các bảng

được tạo ra (Hình 3.30).

Hình 3.47. Xác nhận mối kết nối

91

Tập bài giảng SQL Server

Hình 3.48. Mối kết nối được tạo ra

Bước 5: Lưu mối kết nối. Chọn nút Save/Nhập tên mối kết nối/OK.

Hình 3.49. Lưu mối kết nối

2) Thay đổi cấu trúc bảng - Dùng công cụ MS

Bước 1: Chọn tên cơ sở dữ liệu/Chọn tên bảng/Chọn chuột phải/Chọn Design.

Hình 3.50. Thay đổi cấu trúc bảng dữ liệu

Bước 2: Chỉnh sửa lại cấu trúc bảng.

Hình 3.51. Thiết kế lại bảng dữ liệu

Save trên thanh công cụ để lưu thay đổi. Chọn nút Yes để

Bước 3: Chọn nút xác nhận việc sửa đổi cấu trúc.

92

Tập bài giảng SQL Server

Hình 3.52. Xác nhận việc thiết kế lại bảng dữ liệu

- 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: Khai báo câu lệnh thay đổi cấu trúc bảng dữ liệu (Alter Table).

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 thay đổi cấu trúc bảng dữ liệu.

3) Xoá bảng

- Dùng công cụ MS

Bước 1: Chọn tên cơ sở dữ liệu/Chọn tên bảng/Chọn chuột phải/Chọn Delete.

Hình 3.53. Xóa bảng dữ liệu

Bước 2: Chọn nút OK.

93

Tập bài giảng SQL Server

Hình 3.54. Xác nhận việc xóa bảng dữ liệu

- 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: Khai báo câu lệnh xóa bảng dữ liệu (Drop Table).

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 xóa bảng dữ liệu.

4) Nhập dữ liệu cho bảng

- Nhập trực tiếp

Bước 1: Chọn tên bảng dữ liệu/Chọn Edit

Top 10000 Rows.

Hình 3.55. Nhập dữ liệu cho bảng

94

Tập bài giảng SQL Server

Bước 2: Chọn bản ghi trống cuối cùng và nhập giá trị cho từng trường.

Hình 3.56. Nhập dữ liệu cho các trường

- Nhập từ file

Ta có thể nhập dữ liệu cho bảng bằng cách Import dữ liệu từ loại cơ sở dữ liệu

khác hay SQL Server, chẳng hạn như: Access, Excel, Text, và SQL Server.

Các bước chuyển dữ liệu từ tệp tin Mircrosoft Excel vào SQL Server.

Bước 1: Chọn tên cơ sở dữ liệu/Chọn chuột phải/Chọn Tasks/Chọn Import

Data.

Hình 3.57. Chọn chức năng Import

95

Tập bài giảng SQL Server

Bước 2: Chọn cơ sở dữ liệu nguồn: Chọn Mircosoft Excel tại mục Data Source/Chọn phiên bản của tệp tin Excel trong phần Excel version/Chọn Brower/Chọn

file Excel/Chọn OK/Chọn Next.

Hình 3.58. Chọn dữ liệu nguồn

Bước 3: Chọn cơ sở dữ liệu đích: Chọn trình điều khiển cho loại dữ liệu tại mục

Destination/Chọn tên máy tại mục Server Name/Chọn quyền đăng nhập tại mục

Authentication/Chọn cơ sở dữ liệu đích tại mục Database/Chọn Next.

Hình 3.59. Chọn dữ liệu đích

Bước 4: Chọn hình thức Import/Chọn Next.

96

Tập bài giảng SQL Server

Hình 3.60. Chọn phương thức Import

Bước 5: Chọn Sheet dữ liệu có trong tập tin Excel/Chọn Next.

Hình 3.61. Chọn các Sheet chứa dữ liệu Bước 6: Chọn phương thức thực thi và lưu trữ file đóng gói/Chọn Next.

97

Tập bài giảng SQL Server

Hình 3.62. Thực thi và lưu trữ file đóng gói

Bước 7: Chọn nút Finish để thực hiện Import.

Hình 3.63. Thực hiện Import

Nếu thực hiện thành công việc Import thì SQL Server sẽ thông báo như hình

dưới đây.

98

Tập bài giảng SQL Server

Hình 3.64. Kết quả Import

5) Xuất dữ liệu

Ta có thể xuất dữ liệu từ SQL Server thành các loại cơ sở dữ liệu khác, chẳng

hạn như: Access, Excel, Text, và SQL Server.

Các bước chuyển dữ liệu từ SQL Server thành tệp tin Mircrosoft Excel.

Bước 1: Chọn tên cơ sở dữ liệu/Chọn chuột phải/Chọn Tasks/Chọn Export Data.

Hình 3.65. Chọn chức năng Export

99

Tập bài giảng SQL Server

Bước 2: Chọn cơ sở dữ liệu nguồn: Chọn trình điều khiển cho loại dữ liệu tại mục Data source/Chọn tên máy tại mục Server Name/Chọn quyền đăng nhập tại mục

Authentication/Chọn cơ sở dữ liệu nguồn tại mục Database/Chọn Next.

Hình 3.66. Chọn dữ liệu nguồn

Bước 3: Chọn cơ sở dữ liệu đích: Chọn Mircosoft Excel tại mục Data

Source/Chọn phiên bản của tệp tin Excel trong phần Excel version/Chọn Brower/Nhập

tên file Excel/Chọn Open/Chọn Next.

Hình 3.67. Chọn dữ liệu đích

100

Tập bài giảng SQL Server

Bước 4: Chọn hình thức Export/Chọn Next.

Hình 3.68. Chọn phương thức Export

Bước 5: Chọn dữ liệu cần xuất/Chọn Next.

Hình 3.69. Chọn dữ liệu cần xuất Bước 6: Chọn bảng để kiểm kiểu dữ liệu/Chọn Next.

101

Tập bài giảng SQL Server

Hình 3.70. Kiểm tra kiểu dữ liệu Bước 7: Chọn phương thức thực thi và lưu trữ file đóng gói/Chọn Next.

Hình 3.71. Thực thi và lưu trữ file đóng gói

Bước 8: Chọn nút Finish để thực hiện Export.

102

Tập bài giảng SQL Server

Hình 3.72. Thực hiện Export

6) Cập nhật dữ liệu cho bảng

- Dùng công cụ MS

Bước 1: Chọn tên bảng dữ liệu/Chọn Edit Top 10000 Rows.

Bước 2: Cập nhật dữ liệu các trường.

Hình 3.73. Cập nhật dữ liệu cho các trường

- Dùng câu lệnh T-SQL

, xuất hiện cửa sổ New Query

Bước 1: Chọn nút New Query Bước 2: Khai báo câu lệnh cập nhật dữ liệu (Update).

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ập nhật dữ liệu.

103

Tập bài giảng SQL Server

7) Xoá dữ liệu trong bảng - Dùng công cụ MS

Bước 1: Chọn tên bảng dữ liệu/Chọn Edit Top 10000 Rows.

Bước 2: Chọn bản ghi cần xóa/Chọn chuột phải/Chọn Delete.

Hình 3.74. Xóa bản ghi Chú ý: Có thể xóa nhiều bản ghi cùng một lúc bằng cách chọn bản ghi, giữ

phím Ctrl rồi lại chọn bản ghi khác.

Bước 3: Chọn Yes để đồng ý xóa bản ghi vừa chọn.

Hình 3.75. Xác nhận việc xóa bản ghi

- Dùng câu lệnh T-SQL

, xuất hiện cửa sổ New Query

Bước 1: Chọn nút New Query Bước 2: Khai báo câu lệnh xóa dữ liệu (Delete).

Bước 3: Chọn nút để kiểm tra câu lệnh T-SQL.

để thực hiện xóa bản ghi.

Bước 4: Chọn nút 8) Tách bỏ cơ sở dữ liệu Ta có thể tách cơ sở dữ liệu (gồm các tập tin .mdf, .ndf, .log) ra khỏi sự quản lý

của SQL Server bằng cách sử dụng chức năng Detach.

- Các bước: Bước 1: Chọn tên cơ sở dữ liệu/Chọn chuột phải/Chọn Tasks/Chọn Detach.

104

Tập bài giảng SQL Server

Hình 3.76. Chọn chức năng Detach

Bước 2: Đóng kết nối đang mở bằng cách đánh dấu chọn vào tùy chọn Drop

Conection/Chọn tùy chọn Update Statistics/Chọn OK.

Hình 3.77. Thực hiện Detach

9) Sử dụng lại cơ sở dữ liệu

Ta có thể kết nối lại cơ sở dữ liệu đã bị tách (bằng chức năng Detach) nhờ sử

dụng chức năng Attach. Các bước:

105

Tập bài giảng SQL Server

Bước 1: Chọn mục Database/Chọn chuột phải/Chọn Attach. Khi đó xuất hiện

cửa sổ Attach.

Hình 3.78. Chọn chức năng Attach

Hình 3.79. Cửa sổ Attach

Bước 2: Chọn nút Add. Xuất hiện cửa sổ liệt kê danh sách các tệp tin dữ

liệu/Chọn tệp tin có đuôi là .mdf/Chọn OK.

106

Tập bài giảng SQL Server

Hình 3.80. Chọn tên tệp tin

Bước 3: Tại cửa sổ Attach sau khi đã chọn tệp tin/Chọn OK.

Hình 3.81. Cửa sổ Attach sau khi đã chọn tệp tin

10) Truy vấn thông tin trong bảng - Dùng công cụ MS: Chọn tên bảng dữ liệu/Chọn Select Top 10000 Rows.

107

Tập bài giảng SQL Server

Hình 3.82. Truy vấn thông tin trong bảng

- 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: Khai báo câu lệnh truy vấn dữ liệu (Select From Where…).

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 truy vấn bản ghi.

3.3. Chỉ mục

3.3.1. Các khái niệm

Chỉ mục là một cấu trúc dữ liệu phụ cho phép cải thiện hiệu suất thực thi các

truy vấn bằng cách giảm hoạt động nhập/xuất cần thiết để nhận dữ liệu được yêu cầu.

SQL Server sử dụng chỉ mục không những để tăng tốc độ truy cập dữ liệu mà còn giải

phóng tài nguyên hệ thống cho các hoạt động khác. Tùy thuộc vào kiểu của nó, chỉ

mục được lưu với dữ liệu hoặc tách biệt với dữ liệu.

Cơ sở dữ liệu chỉ mục được tổ chức theo cấu trúc cây nhị phân (B-Tree). Mỗi trang trong chỉ mục được gọi là trang chỉ mục hoặc nút chỉ mục. Cấu trúc chỉ mục bắt đầu từ nút gốc ở cấp trên cùng. Nút gốc đánh dấu bắt đầu chỉ mục. Những dòng chỉ

mục này chứa giá trị khóa và con trỏ chỉ đến trang chỉ mục. Nếu một dòng chỉ mục được thêm vào nút lá đầy, SQL Server sẽ tạo ra không gian trống cho dòng mới bằng cách di chuyển gần một nửa dòng trong nút lá đến trang khác.Việc di chuyển dữ liệu này được gọi là phân trang. Phân trang trên một cấp của cây có thể dẫn đến phân trang cả cây.

Có 3 kiểu chỉ mục: Chỉ mục liên cung (Clustered Index) và chỉ mục phi liên

cung (NonClustered Index), chỉ mục không gian (Spatial Index).

108

Tập bài giảng SQL Server

- Chỉ mục liên cung: Chỉ mục liên cung là loại chỉ mục mà trong đó các bản ghi trong bảng được sắp

thứ tự theo trường chỉ mục. Khi bảng được tạo chỉ mục liên cung thì bản thân nó trở

thành một cây chỉ mục, với các nút lá chứa khóa là các trường được tạo chỉ mục và

cũng đồng thời chứa tất cả các trường còn lại của bảng.

Cách làm việc của chỉ mục là dựa trên ROOT PAGE. Khi cần truy xuất, hệ thống sẽ tìm đến địa chỉ cần tìm trong bảng SYSINDEXES. Ví dụ như trong Root page có hai trường, một trường chứa dữ liệu trong trường chỉ mục, trường còn lại chứa

tham chiếu số trang (dòng) trong bảng. Trường chỉ mục có giá trị là A (tham chiếu

trang bảng trong là 1) và D (tham chiếu trang bảng trong là 2). Giả sử cần tìm "C".

Như vậy, theo hệ chữ cái, hệ thống sẽ biết rằng là C trong khoảng giữa A và D. Từ đó,

hệ thống dò đến trang bảng trong thứ 1 (tức chứa kí tự A, B, C). Tương tự trang 2 sẽ là D,E,F.... Trong trang thứ 1, hệ thống tiếp tục dò tìm kí tự C; lúc này chẳng hạn kí tự C

tham chiếu trang bảng thật. Khi đó, hệ thống lại lần đến trang bảng thật dòng 3 và dữ

liệu được truy xuất (quá trình trên có thể tiếp tục nếu dữ liệu nhiều).

- Chỉ mục phi liên cung:

Chỉ mục phi liên cung không sắp xếp dữ liệu theo một trật tự vật lý mà là tự do

trong bảng thông tin, nhưng sao cho nó nằm trong một logic do chỉ mục qui định.

Trong một bảng có thể chứa đến 249 chỉ mục phi liên cung. Cách hoạt động của chỉ

mục phi liên cung thì tương tự chỉ mục liên cung.

- Chỉ mục không gian:

Là một thành phần trong SQL Server 2008 cung cấp cho người dùng những

trường dữ liệu đặc biệt, có liên quan đến dữ liệu biểu trưng mà liên quan đến lĩnh vực

không gian, ví dụ như địa lý và hình học.

Có 3 loại chỉ mục: chỉ mục khóa (Primary Index), chỉ mục duy nhất (Unique

Index), chỉ mục không duy nhất (NonUnique).

- Chỉ mục khóa Chỉ mục khóa chỉ rõ trường hoặc các trường sinh ra chỉ mục. Chỉ mục khóa là giá trị cho phép tìm kiếm nhanh dòng chứa dữ liệu muốn tìm. Để truy cập dòng dữ liệu

dùng chỉ mục, ta phải đưa giá trị khóa chỉ mục hoặc các giá trị vào mệnh đề WHERE.

Chỉ mục khóa có 2 loại: Chỉ mục đơn giản và chỉ mục kết hợp.

Chỉ mục đơn giản là chỉ mục được định nghĩa bằng một trường trong bảng.

Trường là khóa của bảng thường được chọn để định nghĩa là chỉ mục đơn.

Chỉ mục kết hợp là chỉ mục được định nghĩa trên nhiều hơn một trường. - Chỉ mục duy nhất

109

Tập bài giảng SQL Server

Chỉ mục duy nhất là chỉ mục chỉ chứa một dòng dữ liệu cho mỗi khóa chỉ mục, có nghĩa là giá trị khóa chỉ mục xuất hiện duy nhất một lần trong chỉ mục. Chỉ mục

duy nhất hoạt động hiệu quả hơn vì chúng đảm bảo rằng chỉ cần nhiều hơn một hoạt

động nhập/xuất để nhận dữ liệu yêu cầu. SQL Server không cho phép giá trị khóa

giống nhau được thêm vào cơ sở dữ liệu. Một chỉ mục là duy nhất nếu bản thân dữ liệu là duy nhất. Nếu dữ liệu trong một trường không là duy nhất ta có thể tạo ra chỉ mục duy nhất bằng cách dùng chỉ mục kết hợp. - Chỉ mục không duy nhất

Chỉ mục không duy nhất làm việc giống như chỉ mục duy nhất. Tuy nhiên, nó

cho phép chứa các giá trị trùng nhau trong nút lá. Chỉ mục không duy nhất không hiệu

quả như chỉ mục duy nhất vì nó đòi hỏi xử lý thêm để nhận dữ liệu yêu cầu.

3.3.2. Tạo chỉ mục

Bước 1: Chọn tên bảng/Chọn Indexes/Chọn chuột phải/Chọn New Index

Hình 3.83. Tạo chỉ mục

Bước 2: Xác định các thông số - Nhập tên chỉ mục tại mục Index Name - Chọn kiểu Index tại mục Type Index + Clustered: là chỉ mục liên cung + Nonclustered: là chỉ mục phi liên cung + Spatial: là chỉ mục không gian

110

Tập bài giảng SQL Server

- Nếu muốn tạo chỉ mục duy nhất, đánh dấu chọn tại mục Unique. Ngược lại,

bỏ mục chọn Unique.

- Chọn nút Add

Hình 3.84. Chọn các thông số cho chỉ mục

Bước 3: Chọn trường làm chỉ mục/Chọn OK.

Hình 3.85. Chọn trường làm chỉ mục

Kết quả tạo một chỉ mục liên cung đơn giản

111

Tập bài giảng SQL Server

Hình 3.86. Kết quả tạo chỉ mục liên cung

3.3.3. Loại bỏ chỉ mục

Chọn tên chỉ mục/chọn chuột phải/Chọn Delete/Chọn OK.

3.4. View

3.4.1. Khái niệm view

View là một bảng ảo được định nghĩa bằng cách dùng câu lệnh Select. Dữ liệu

nguồn của View là Tables, View, Functions, Sysnonyms. View được lưu trữ như một phát biểu SQL được định nghĩa trước.

3.4.2. Các thao tác với View

1) Tạo View

- Dùng công cụ MS

Bước 1: Chọn cơ sở dữ liệu/Chọn Views/Chọn chuột phải/Chọn New View.

Hình 3.87. Tạo view

Bước 2: Chọn dữ liệu nguồn cho View - Chọn mục Tables, hoặc Views, hoặc Functions, hoặc Synonyms - Chọn từng bảng hoặc view hoặc hàm/Chọn Add

112

Tập bài giảng SQL Server

- Chọn OK.

Hình 3.88. Chọn dữ liệu nguồn cho view

Bước 3: Thiết kế View

- Chọn các trường hoặc xây dựng các biểu thức cần đưa ra tại trường Column.

- Nhập bí danh cho trường tại trường Alias.

- Đánh dấu vào mục Output tương ứng với trường cần đưa ra.

- Chọn kiểu sắp xếp cho trường muốn sắp xếp tại trường Sort Type.

- Chọn thứ tự ưu tiên sắp xếp cho các trường tại trường Sort Order.

- Tạo điều kiện lọc tại trường Filter.

Hình 3.89. Thiết kế View

Bước 4: Lưu view

trên thanh công cụ.

Bước 5: Chạy View bằng cách chọn nút Tạo view có phân nhóm: Bước 1, 2, 3 tương tự như tạo view không có sự phân nhóm. Bước 4: Chọn chuột phải/Chọn Add Group By

113

Tập bài giảng SQL Server

Hình 3.90. Tạo nhóm mới

Bước 5: Tại trường Group By chọn thông số (Group By, Max, Min, Count,

Sum, Where, Avg,…) phù hợp cho từng trường.

Hình 3.91. Thiết kế nhóm

Bước 6: Lưu view

Bước 7: Chạy View bằng cách chọn nút trên thanh công cụ.

- 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: Khai báo câu lệnh tạo view (Create View).

Bước 3: Chọn nút để kiểm tra câu lệnh T-SQL.

để thực hiện tạo view.

Bước 4: Chọn nút 2) Thay đổi view

Chọn tên View/Chọn chuột phải/Chọn Design/Chỉnh sửa.

3) Xoá view Chọn tên View/Chọn chuột phải/Chọn Delete/Chọn OK.

114

Tập bài giảng SQL Server

Chƣơng 4 THỦ TỤC LƢU TRỮ VÀ HÀM NGƢỜI DÙNG

4.1. Thủ tục lƣu trữ (Stored Procedure)

4.1.1. Khái niệm

Thủ tục lưu trữ là một đối tượng trong cơ sở dữ liệu, bao gồm nhiều câu lệnh T-

SQL được tập hợp lại với nhau thành một nhóm. Các câu lệnh này sẽ được thực thi khi thủ tục lưu trữ được thực thi.

Trong thủ tục lưu trữ, ta có thể nhúng ngôn ngữ lập trình vào trong ngôn ngữ T-

SQL. Thủ tục lưu trữ có thể có các thành phần sau:

- Các cấu trúc điều khiển (IF, WHILE, FOR , CASE,…)

- Các biến nhằm lưu giữ các giá trị tính toán được, các giá trị được truy xuất

được từ cơ sở dữ liệu.

Thủ tục lưu trữ được lưu trữ như một phần của cơ sở dữ liệu. Cấu trúc của

chúng như một văn bản text. Một tập các câu lệnh SQL được kết hợp lại với nhau

thành một khối lệnh bên trong một thủ tục. Một thủ tục có thể nhận các tham số truyền

vào cũng như có thể trả về các giá trị thông qua các tham số. Khi một thủ tục lưu trữ đã được định nghĩa, nó có thể được gọi thông qua tên thủ tục, nhận các tham số truyền

vào, thực thi các câu lệnh SQL bên trong thủ tục và có thể trả về các giá trị sau khi

thực hiện xong.

SQL Server chỉ biên dịch các thủ tục lưu trữ một lần và sử dụng lại kết quả biên

dịch này trong các lần tiếp theo trừ khi người dùng có những thiết lập khác. Việc sử

dụng lại kết quả biên dịch không làm ảnh hưởng đến hiệu suất hệ thống khi thủ tục lưu

trữ được gọi liên tục nhiều lần. Thủ tục lưu trữ được phân tích, tối ưu khi tạo ra nên

việc thực thi chúng nhanh hơn nhiều so với việc phải thực hiện một tập rời rạc các câu

lệnh SQL tương đương theo cách thông thường. Thủ tục lưu trữ cho phép thực hiện

cùng một yêu cầu bằng một câu lệnh đơn giản thay vì phải sử dụng nhiều dòng lệnh SQL. Điều này sẽ làm giảm thiểu sự lưu thông trên mạng. Thay vì cấp phát quyền trực

tiếp cho người sử dụng trên các câu lệnh SQL và trên các đối tượng cơ sở dữ liệu, ta có thể cấp phát quyền cho người sử dụng thông qua các thủ tục lưu trữ, nhờ đó tăng

khả năng bảo mật đối với hệ thống.

Các thủ tục lưu trữ trả về kết quả theo 4 cách:

- Sử dụng các tham số output.

- Sử dụng các lệnh trả về giá trị, các lệnh này luôn trả về giá trị số nguyên. - Tập các giá trị trả về của mỗi câu lệnh SELECT có trong thủ tục lưu trữ hoặc

của quá trình gọi một thủ tục lưu trữ khác trong một thủ tục lưu trữ.

115

Tập bài giảng SQL Server

- Một biến con trỏ toàn cục có thể tham chiếu từ bên ngoài thủ tục.

4.1.2. Các loại thủ tục lưu trữ. Có 5 kiểu thủ tục lưu trữ

- Thủ tục lưu trữ hệ thống

- Thủ tục lưu trữ bên ngoài - Thủ tục lưu trữ do người dùng định nghĩa - Thủ tục lưu trữ tạm thời - Thủ tục lưu trữ từ xa

1) Thủ tục lưu trữ hệ thống (System stored procedure)

Trong Microsoft SQL Server cung cấp cho chúng ta một số lớn các thủ tục lưu

trữ hệ thống dùng để thực hiện các xử lý trong việc quản trị cơ sở dữ liệu. Một thủ tục

lưu trữ hệ thống luôn luôn được bắt đầu bằng chữ sp_ và hầu hết tất cả các thủ tục lưu trữ hệ thống được lưu trữ bên trong cơ sở dữ liệu Master. Có hàng trăm Thủ tục lưu trữ

hệ thống trong SQL Server. Ta có thể xem chi tiết trong SQL Server Books Online.

Một số thủ tục lưu trữ hệ thống thông dụng:

STT Thủ tục Mô tả

Sp_Who Cung cấp các sử dụng đang truy cập SQL Server 1

Sp_Who2 Cung cấp các sử dụng đang truy cập SQL Server 2

Sp_configure Cho biết cấu hình của SQL Server 3

Sp_tables Cung cấp thông tin về bảng 4

Sp_password Cho phép thay đổi password của một người dùng 5

Sp_helptext Hiện thị nội dung của đối tượng View, thủ tục lưu trữ 6

Sp_helppdb Hiện thị nội dung của cơ sở dữ liệu 7

Sp_dropuser Cho phép xóa một người dùng 8

Sp_Columns Hiện thị nội dung của bảng 9

10 Sp_adduser Thêm một người dùng vào cơ sở dữ liệu

11 Sp_addlogin Cho phép tạo một Login User

Ví dụ 1: Muốn xem các bảng trong cơ sở dữ liệu Master ta dùng thủ tục

sp_tables.

116

Tập bài giảng SQL Server

Hình 4.1. Thông tin về bảng trong cơ sở dữ liệu Master

Ví dụ 2: Tạo mới một người dùng có tên là "linhgiang", với mật khẩu "12345"

cho phép truy cập vào cơ sở dữ liệu "QLTS", bằng thủ tục hệ thống sp_addlogin như

sau:

use master

go

exec sp_addlogin 'linhgiang', '12345' , 'QLTS'

Hình 4.2. Kết quả thêm một người dùng mới

2) Thủ tục lưu trữ bên ngoài (Extended Stored Procedure) Thủ tục lưu trữ bên ngoài là một loại thủ tục lưu trữ sử dụng một chương trình

ngoại vi (external program) vốn được dịch thành một thư viện liên kết động (DLL) để mở rộng chức năng hoạt động của SQL Server. Loại này thường bắt đầu bằng tiếp đầu ngữ xp_.

Ví dụ, thủ tục xp_sendmail dùng đề gởi mail cho một người nào đó; thủ

xp_cmdshell dùng để chạy một câu lệnh DOS.

Nhiều loại thủ tục lưu trữ bên ngoài được xem như thủ tục lưu trữ hệ thống và

ngược lại.

3) Thủ tục lưu trữ do người dùng định nghĩa (Local Stored Procedure)

117

Tập bài giảng SQL Server

Thủ tục lưu trữ do người dùng định nghĩa là loại thường dùng nhất. Chúng được chứa trong cơ sở dữ liệu người dùng và thường được viết để thực hiện một công việc

nào đó. Thông thường khi nói đến thủ tục lưu trữ là nói đến loại này. Thủ tục lưu trữ

thường được viết bởi người quản trị cơ sở dữ liệu hoặc lập trình viên.

Ví dụ, ta tạo ra một thủ tục từ cơ sở dữ liệu QLTS để tìm kiếm thông tin các thí

sinh thì thủ tục này được gọi là thủ tục lưu trữ được định nghĩa bởi người dùng.

4) Thủ tục lưu trữ tạm thời (Temporary Stored Procedure) Thủ tục lưu trữ tạm thời là những thủ tục lưu trữ tương tự như thủ tục lưu trữ do

người dùng định nghĩa. Các thủ tục này được tạo ra trên TempDB của SQL Server nên

chúng sẽ bị xóa khi kết nối tạo ra chúng bị cắt đứt hay khi SQL Server bị ngắt.

Thủ tục lưu trữ tạm thời được chia làm 3 loại: local (bắt đầu bằng #), global (bắt

đầu bằng ##) và stored procedure được tạo ra trực tiếp trên TempDB. Loại local chỉ được sử dụng bởi kết nối đã tạo ra chúng và bị xóa khi kết nối bị ngắt. Loại global có

thể được sử dụng bởi bất kỳ kết nối nào. Loại stored procedure được tạo trực tiếp trên

TempDB. Chúng khác với 2 loại trên ở chỗ, chúng tồn tại kể cả sau khi kết nối tạo ra

chúng bị cắt đứt và chỉ biến mất khi SQL Server bị ngắt.

5) Thủ tục lưu trữ từ xa (Remote Stored Procedure )

Thủ tục lưu trữ từ xa gọi các thủ tục lưu trữ từ các server khác.

4.1.3. Ngôn ngữ DLL của thủ tục lưu trữ

1) Tạo thủ tục lưu trữ

Tác dụng: Dùng để tạo một thủ tục lưu trữ

Cú pháp:

CREATE PROCEDURE

[<@Parameter_Name> [= ] [ OUT | OUTPUT ] [READONLY],

<@Parameter_Name> [= ] >] [ OUT | OUTPUT ] [READONLY]]

[WITH RECOMPLILE|ENCRIPTION| [ EXECUTE_AS_Clause]]

[FOR REPLICATION ]

AS BEGIN

Insert statements for procedure here

END Trong đó:

- Procedure_Name: Tên thủ tục cần tạo

118

Tập bài giảng SQL Server

- @Parameter_Name: Tên tham số - Datatype: Kiểu dữ liệu

- Default_Value: Giá trị mặc định

- OUTPUT: Xác định tham số có phải là tham số đầu ra hay không.

- READONLY: Xác định tham số không được thay đổi trong thân của thủ tục. - RECOMPLILE: Cho biết SQL Server có biên dịch lại thủ tục mỗi khi gọi thủ

tục. Tùy chọn này sẽ không được sử dụng khi FOR REPLICATION được chỉ định.

- ENCRIPTION: Cho biết SQL Server mã hóa thủ tục.

- EXECUTE_AS_Clause: Xác định nội dung bảo mật được thực thi trong thủ

tục.

- FOR REPLICATION: Chỉ ra rằng thủ tục được dùng như một bộ lọc và chỉ

được thực thi trong quá trình sao chép. Tham số hình thức không được sử dụng khi sử dụng lựa chọn này.

Ví dụ: Tạo một thủ tục lưu trữ đưa ra các thông tin gồm: Số báo danh, họ tên, ngày

sinh của các thí sinh.

Create procedure sp_SelectTS

as

begin

select Sobd,Hoten,ngaysinh

from Thisinh

end

2) Sửa thủ tục lưu trữ

Tác dụng: Thay đổi nội dung của một thủ tục

Cú pháp:

ALTER PROCEDURE

[<@Parameter_Name> [= ] [ OUT | OUTPUT ]

[READONLY], … <@Parameter_Name> [= ] >] [ OUT | OUTPUT ]

[READONLY]]

[WITH RECOMPLILE|ENCRIPTION| [ EXECUTE_AS_Clause]] [FOR REPLICATION ]

AS

BEGIN Alter statements for procedure here

END

119

Tập bài giảng SQL Server

Ví dụ: Thay đổi thủ tục sp_SelectTS đư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 có tuổi lớn nhất.

Alter procedure sp_SelectTS

as

begin declare @maxAge int select @maxAge = max(year(getdate())-year(ngaysinh)) from Thisinh

select Sobd,Hoten,ngaysinh

from Thisinh

where year(getdate())-year(ngaysinh)=@maxAge

end 3) Xóa thủ tục lưu trữ

Tác dụng: Xóa thủ tục đã tạo

Cú pháp:

DROP PROCEDURE

Với là tên thủ tục lưu trữ sẽ bị xóa.

Ví dụ: Xóa thủ tục có tên là sp_SelectTS

DROP PROCEDURE sp_SelectTS

4.1.4. Tham số trong thủ tục lưu trữ

Thủ tục lưu trữ rất hữu ích trong mô hình khách chủ, nhưng nó sẽ trở nên hiệu

quả hơn khi bạn biết cách sử dụng các tham số đi kèm với nó. Với những tham số này,

ta có thể truyền vào các giá trị cần thiết cho các xử lý bên trong của thủ tục lưu trữ. Ta

có thể định nghĩa ra một hoặc nhiều tham số có bên trong một thủ tục lưu trữ. Tên của các tham số mà ta định nghĩa chỉ có phạm vi cục bộ bên trong thủ tục lưu trữ. Chúng là

các tham số hình thức. Giống như tên của các tham số trong các ngôn ngữ lập trình

khác, ta có thể đặt tên tham số trong thủ tục lưu trữ một cách gợi nhớ và duy nhất. Một thủ tục được phép có tối đa 1024 tham số.

Khi thực hiện một thủ tục lưu trữ, ta có thể truyền tham số để thông báo cho thủ

tục lưu trữ nên làm những gì trong cơ sở dữ liệu.

Có 2 loại tham số: - Tham số nhập

- Tham số xuất

1) Tham số nhập (input parameter) Là loại tham số do người dùng truyền vào hoặc do một thủ tục lưu trữ khác hay

ứng dụng khác gửi đến.

120

Tập bài giảng SQL Server

Cú pháp: <@Parameter_Name> [= |NULL]

Trong đó:

- Parameter_Name: Là tên tham số của thủ tục, nó phải duy nhất trong thủ tục

và nên đặt tên tham số một cách gợi nhớ.

- Datatype: Là kiểu dữ liệu của tham số, quy định loại dữ liệu tương ứng được

truyền vào cho thủ tục.

- Default_Value: Là giá trị mặc định được gán vào tham số nhập khi tham số

nhập không được nhận giá trị khi thủ tục được gọi thực hiện. Nó có thể mang giá trị

NULL.

Ví dụ 1: Tạo một thủ tục đư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 mà đã đăng kí dự thi ngành có mã ngành cho trước.

Create procedure sp_SelectTS_Nganh1

@man nvarchar(25)

as

begin

select Sobd,Hoten,ngaysinh

from Thisinh

where man=@man

end

Ví dụ 2: Tạo một thủ tục đư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 mà đã đăng kí dự thi ngành có mã ngành là „MN001‟.

Create procedure sp_SelectTS_Nganh2

@man nvarchar(25)=‟MN01‟ as

begin

select Sobd,Hoten,ngaysinh from Thisinh where man=@man

end

2) Tham số xuất (output parameter) Trong những ví dụ trên, ta thấy rõ ý nghĩa sử dụng của các tham số đầu nhập.

Tuy nhiên, trong thực tế ta cũng mong muốn nhận các giá trị trả về từ những xử lý bên

trong thủ tục lưu trữ thông qua các tham số. Khái niệm này còn được gọi là tham số xuất, là những tham số mà giá trị của nó sẽ được tính toán từ bên trong thủ tục lưu trữ

và các giá trị đó sẽ được giữ nguyên sau khi thoát ra khỏi thủ tục. Khái niệm này hoàn

121

Tập bài giảng SQL Server toàn giống khái niệm tham số truyền vào theo địa chỉ (by Reference) trong một số các ngôn ngữ lập trình như : Pascal, Visual Basic.

Cú pháp:

<@Parameter_Name> OUTPUT

Ví dụ: Tạo một thủ tục đưa ra tổng điểm 3 môn của thí sinh có số báo danh cho trước. CREATE PROCEDURE sp_TONGD @sbd nvarchar(25), @tongd float output

AS

BEGIN

select @tongd=dtoan+dly+dhoa

from Thisinh where sbd =@sbd

END

4.1.5. Giá trị trả về trong thủ tục lưu trữ

Nếu đối số truyền cho thủ tục khi có lời gọi đến thủ tục là biến, những thay đổi giá

trị của biến trong thủ tục sẽ không được giữ lại khi kết thúc quá trình thực hiện thủ tục.

Nếu cần giữ lại giá trị của đối số sau khi kết thúc thủ tục thì dùng tham số

OUTPUT. Ngoài ra, ta có thể sử dụng câu lệnh RETURN trả về giá trị cho đối tượng

thực thi thủ tục lưu trữ.

Ví dụ: Nhập vào 2 số và tính tổng. Giả sử a=100, b=200

Cách 1:

Create procedure sp_TestOutput1

@a int, @b int, @c int as

Begin

select @c = @a * @b end Kết quả trả về là: 0

Cách 2:

CREATE PROCEDURE sp_TestOutput2 @a int, @b int, @c int output

AS

BEGIN select @c = @a * @b

END

122

Tập bài giảng SQL Server

Kết quả trả về là: 20000 Cách 3:

CREATE PROCEDURE sp_TestOutput3

@a int, @b int

AS BEGIN declare @c int select @c = @a * @b

return @c

END

Kết quả trả về là: 20000

4.1.6. Thao tác với thủ tục lưu trữ

1) Tạo thủ tục lưu trữ

- Dùng công cụ MS

Bước 1: Chọn tên cơ sở dữ liệu/Chọn Programmability/Chọn Stored

Procedure/Chọn chuột phải/Chọn New Stored Procedure.

Hình 4.3. Tạo thủ tục lưu trữ

Bước 2: Viết đoạn mã lệnh tạo thủ tục lưu trữ.

Hình 4.4. Viết mã lệnh tạo thủ tục lưu trữ bằng MS

123

Tập bài giảng SQL Server

Bước 3: Chọn nút để kiểm tra câu lệnh T-SQL.

để thực hiện câu lệnh tạo thủ tục lưu trữ.

Bước 4: Chọn nút - 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: Khai báo câu lệnh tạo thủ tục lưu trữ (Create Procedure); trước khi viết

câu lệnh tạo thủ tục lưu trữ phải khai báo sử dụng cơ sở dữ liệu bằng lệnh USE.

Hình 4.5. Viết mã lệnh tạo thủ tục lưu trữ bằng T-SQL

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ữ.

Hình 4.6. Kết quả tạo thủ tục lưu trữ

2) Thực thi thủ tục lưu trữ - Dùng công cụ MS

Bước 1: Chọn tên thủ tục lưu trữ/Chọn chuột phải/Chọn Execute Stored

Procedure.

124

Tập bài giảng SQL Server

Hình 4.7. Thực thi thủ tục lưu trữ bằng công cụ MS

Bước 2: Nhập giá trị cho tham số nhập/Chọn OK.

Hình 4.8. Nhập giá trị cho tham số nhập

- Dùng câu lệnh T-SQL

, xuất hiện cửa sổ New Query

Bước 1: Chọn nút New Query Bước 2: Khai báo câu lệnh thực thi thủ tục lưu trữ Cú pháp: EXECUTE|EXEC Procedure_name [] Ví dụ: Thực thi thủ tục sp_Timkiem với tham số nhập vào là „Nam Dinh‟. use qlts exec sp_Timkiem 'Nam Dinh'

125

Tập bài giảng SQL Server

Bước 3: Chọn nút để kiểm tra câu lệnh T-SQL.

để thực hiện câu lệnh thực thi thủ tục lưu trữ.

Bước 4: Chọn nút Chú ý: Khi SQL Server thực thi một câu lệnh SQL hay một thủ tục lưu trữ có tham số thì các giá trị của tham số phải được định dạng đúng kiểu dữ liệu. Khi một

ứng dụng nào đó viết bằng Visual Basic, Visual Basic.Net, ASP, ASP.Net, C#,

JSP,..thì để gọi một thủ tục hay một phát biểu SQL trong SQL Server, giá trị từ các

form nhập liệu chuyển vào cho SQL Server thực thi phải là chuỗi SQL đúng cú pháp. Nếu câu SQL sai thì SQL Server sẽ thông báo lỗi.

3) Thay đổi thủ tục lưu trữ

- Dùng công cụ MS: Chọn tên thủ tục/Chọn chuột phải/Chọn Modify.

- Dùng câu lệnh T-SQL: Dùng câu lệnh Alter Procedure

4) Xóa thủ tục lưu trữ - Dùng công cụ MS: Chọn tên thủ tục/Chọn chuột phải/Chọn Delete/Chọn OK.

- Dùng câu lệnh T-SQL: Dùng câu lệnh Drop Procedure

4.2. Hàm ngƣời dùng (User Defined Functions)

4.2.1. Khái niệm

Hàm do người dùng định nghĩa (user defined functions-UDFs) là một đối tượng

mới được bổ sung vào từ phiên bản SQL Server 2000. UDFs mang đầy đủ các ý nghĩa

và tính chất của một hàm như đa số các ngôn ngữ lập trình khác, nghĩa là một UDFs là một chương trình con đảm trách một xử lý nào đó với đặc tính là sẽ nhận các tham số

đầu vào và trả về một giá trị kết quả xử lý tính toán được dựa trên các tham số đầu vào

đã nhận.

UDFs không những mang đầy đủ tính chất của một hàm mà UDFs còn là sự kết

hợp của hai đối tượng View và Stored Procedure. Hơn thế nữa, nó còn có những tính

năng sử dụng mà View và Stored Procedure không có được, tức nó khắc phục một số

hạn chế của View và Stored Procedure. Ví dụ, Stored Procedure không thể là một phần

của câu lệnh SELECT như UDFs, View không hỗ trợ sự đệ quy trong khi với UDFs thì hỗ trợ đệ quy.

Không chỉ UDFs mà tất cả các hàm có sẵn trong các phiên bản SQL Server có thể phân ra thành hai nhóm: hàm xác định (deterministic) và hàm không xác định (non-deterministic). Các hàm xác định sẽ luôn luôn trả về cùng giá trị nếu giá trị các tham số được truyền vào là như nhau. Các hàm không xác định có thể tạo ra các kết quả khác biệt tại mỗi thời điểm chúng được gọi thực hiện, ngay cả khi giá trị các tham số được cung cấp vẫn không thay đổi.

126

Tập bài giảng SQL Server

Hàm getdate() là một ví dụ cho cả hai hàm vô hướng (scalar) và hàm không xác định (non-deterministic). Nếu ta gọi thực hiện nó hai lần với cùng một dòng lệnh gọi,

bạn sẽ nhận được hai kết quả khác nhau và chỉ có duy nhất một giá trị cho mỗi lần gọi.

4.2.2. Các loại hàm người dùng và ngôn ngữ DLL cho hàm người dùng

Hàm người dùng được chia làm 3 loại: - Hàm vô hướng (Scalar) - Hàm nội tuyến (Inline table-valued) - Hàm đa lệnh (Multi-statement table-valued)

1) Tạo hàm người dùng

a) Hàm vô hướng

Hàm vô hướng được sử dụng để trả về duy nhất một giá trị dựa trên một số các

tham số truyền vào. Nó là hàm xác định.

Cú pháp:

CREATE FUNCTION

(

<@Parameter_Name1> ,

<@Parameter_NameN>

)

RETURNS

AS

BEGIN

DECLARE <@ResultVar> SELECT <@ResultVar> =

<@Parameter_Name1,…,@Parameter_NameN>

RETURN <@ResultVar> END Trong đó:

- Scalar_Function_Name: Tên hàm vô hướng

- @Parameter_Name1: Tham số nhập của hàm - Datatype1: Kiểu dữ liệu

- @ResultVar: Biến lưu trữ kết quả trả về hàm

- Function_Data_Type: Kiểu dữ liệu trả về của hàm Ví dụ 1: Xây dựng hàm trả về thứ của một ngày trong cơ sở dữ liệu QLTS.

CREATE FUNCTION Scalar_Date(@bngay date )

127

Tập bài giảng SQL Server

RETURNS nvarchar(10) AS

BEGIN

declare @st nvarchar(10)

select @st=case datepart(dw,@bngay) when 1 then 'chu nhat' when 2 then 'thu hai' when 3 then 'thu ba'

when 4 then 'thu tu'

when 5 then 'thu nam'

when 6 then 'thu sau'

else 'thu bay' end

return (@st)

END

Ví dụ 2: Xây dựng hàm chuyển điểm số về điểm chữ. Biết rằng A (8,5 - 10), B

(7,0 - 8,4), C (5,5 - 6,9), D (4,0 - 5,4), F (dưới 4,0) trong cơ sở dữ liệu QLD.

CREATE FUNCTION Scalar_Convert(@diemso float)

RETURNS char(1)

AS

BEGIN

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 SELECT @diemchu='F' RETURN @diemchu

END

Ví dụ 3: Xây dựng hàm chuẩn một chuỗi trong cơ sở dữ liệu QLMBH, theo quy

ước cắt bỏ các khoảng trắng đầu và cuối chuỗi, cắt bỏ các khoảng trắng thừa sao cho giữa hai từ chỉ cách nhau bởi duy nhất một khoảng trắng, ký tự đầu tiên của từ là ký tự

hoa, các ký tự còn lại là chữ thường.

CREATE FUNCTION Scalar_Chuanhoa(@st varchar(50)) RETURNS varchar(50)

AS

128

Tập bài giảng SQL Server

BEGIN DECLARE @chuoichuan varchar(50)

DECLARE @i int

declare @space1 nvarchar(30)

declare @space2 nvarchar(30) set @space1=char(32) set @space2=char(32)+char(32)

while CharIndex(@space2,@st)>0

set @st=replace(@st,@space2,@space1)

Set @st=ltrim(rtrim(@st)) Set @st=Lower(@st)

Set @st=@space1+@st

set @i=CharIndex(@space1,@st)

while @i<>0

begin

set @st=

STUFF(@st,@i+1,1,Upper(substring(@st,@i+1,1)))

set @i=charindex(@space1,@st,@i+1)

end

set @st=STUFF(@st,1,1,null)

SELECT @chuoichuan=@st RETURN @chuoichuan

END

b) Hàm nội tuyến Hàm nội tuyến trả về một bảng dựa trên một câu lệnh SQL duy nhất định nghĩa các dòng và các trường trả về. Nó là hàm không xác định. Với loại hàm này, ta chỉ có

thể thực hiện bên trong nó câu lệnh SELECT rõ ràng không quá phức tạp. Hàm nội

tuyến thực chất được dùng để thay thế cho các đối tượng VIEW, bởi vì nó khắc phục được nhược điểm không có tham số của VIEW. Ta có thể coi hàm nội tuyến giống như

là một VIEW có tham số.

Cú pháp: CREATE FUNCTION

(

129

Tập bài giảng SQL Server

<@Parameter_Name1> , …

<@Parameter_NameN>

)

RETURNS TABLE AS RETURN (

SELECT 0

)

Trong đó kiểu trả về của hàm phải được chỉ định bởi mệnh đề RETURNS

TABLE. Trong phần thân của hàm chỉ có duy nhất một câu lệnh RETURN xác định giá trị trả về của hàm thông qua duy nhất một câu lệnh SELECT, không sử dụng bất kỳ

câu lệnh nào khác trong phần thân của hàm.

Ví dụ 1: Xây dựng hàm trả về 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ê cho trước.

CREATE FUNCTION Inline_VD1(@bdc nvarchar(15))

RETURNS TABLE

AS

RETURN

(

SELECT Dbo.Thisinh.sobd, Dbo.Thisinh.hoten,

Dbo.Thisinh.ngaysinh,

from Dbo.Thisinh Where Dbo.Thisinh.quequan=@bdc

)

Ví dụ 2: Xây dựng hàm trả về 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 với tên ngành cho trước.

CREATE FUNCTION [dbo].[Inline_VD2](@btenn nvarchar(50))

RETURNS TABLE AS

RETURN

( SELECT Dbo.Thisinh.sbd, Dbo.Thisinh.hoten,

Dbo.Thisinh.ngaysinh,Dbo.Nganh.Tenn,

130

Tập bài giảng SQL Server

Dbo.Thisinh.dtoan+Dbo.Thisinh.dhoa+Dbo.Thisinh.dly+Dbo.Uutien.dc as td from Dbo.Thisinh inner join dbo.nganh on Dbo.Thisinh.man=dbo.nganh.man

inner join dbo.uutien on Dbo.Thisinh.maut=dbo.uutien.maut

Where ltrim(rtrim(Dbo.nganh.tenn))=ltrim(rtrim(@btenn))

) c) Hàm đa lệnh Hàm đa lệnh cũng trả về kết quả là một bảng nhưng có thể dựa trên nhiều câu lệnh SQL. Nó là hàm không xác định. Hàm đa lệnh rất giống các thủ tục lưu trữ. Nó

cho phép thực hiện các câu lệnh SELECT phức tạp. Hơn nữa, nó còn cho phép thực

hiện các câu lệnh logic khác như UPDATE, INSERT INTO, … Đồng thời, ta có thể

thiết lập cấu trúc trong cặp dấu ngoặc đơn ngay sau câu lệnh RETURNS. Loại này sẽ

luôn trả về một biến table (chỉ duy nhất một biến table).

Cú pháp:

CREATE FUNCTION

(

<@Parameter_Name1> ,

<@Parameter_NameN>

)

RETURNS <@Table_Variable_Name>

TABLE

(

,

…,

)

AS BEGIN …

Insert into <@Table_Variable_Name>[(,…)]

135

Tập bài giảng SQL Server

… 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 Với 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

136

Tập bài giảng SQL Server

- 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.

để thực hiện câu lệnh xây dựng hàm vô hướng.

Bước 4: Chọn nút + 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

137

Tập bài giảng SQL Server

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.

để thực hiện câu lệnh xây dựng hàm nội tuyến.

Bước 4: Chọn nút + 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

, xuất hiện cửa sổ New Query

Bước 1: Chọn nút 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.

để thực hiện câu lệnh tạo thủ tục lưu trữ.

Bước 4: Chọn nút Kết quả tạo các hàm người dùng

138

Tập bài giảng SQL Server

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‟.

139

Tập bài giảng SQL Server

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 *

140

Tập bài giảng SQL Server

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

141

Tập bài giảng SQL Server

Chƣơng 5 QUẢN LÝ TRIGGER

5.1. Giới thiệu

5.1.1. Khái niệm

Trigger có thể xem là một dạng đặc biệt của thủ tục lưu trữ, bởi vì bên trong nội

dung của trigger lưu trữ các câu lệnh dùng để thực hiện một số hành động nào đó mà người lập trình sẽ chỉ ra. Tuy nhiên, khác với thủ tục lưu trữ, trigger hoàn toàn không

có tham số và giá trị trả về. Ngoài ra, chúng ta không thể gọi thực hiện trực tiếp trigger

bằng lệnh EXECUTE như thủ tục lưu trữ hoặc bằng bất kỳ một lệnh nào khác mà

Trigger được thực thi một cách tự động khi có sự thay đổi dữ liệu (do tác động của câu

lệnh INSERT, UPDATE, DELETE) trên một bảng nào đó. Chính nhờ vào tính năng đặc biệt là tự động thực hiện mà nội dung các lệnh bên trong trigger được dùng cho

các công việc sau:

- Kiểm tra các ràng buộc toàn vẹn dữ liệu phức tạp.

- Thực hiện các xử lý được thiết kế thi hành tại server (trong mô hình

client/server). Các xử lý mà ta muốn chúng sẽ được tự động thực hiện khi có thao tác INSERT, UPDATE hoặc DELETE xảy ra.

- Trigger cũng được dùng để thay thế các ràng buộc trong trường hợp ta muốn

việc kiểm tra ràng buộc dữ liệu kèm theo các câu thông báo thích hợp theo ý muốn

người dùng.

5.1.2. Các ứng dụng của Trigger

Khi sử dụng Trigger thì ta cần phải xem xét trường hợp nào và khi nào sử dụng

Trigger. Khi xây dựng các ứng dụng cơ sở dữ liệu, Trigger có thể thực hiện được

nhiều thứ nhưng chúng cũng có thể gây ra nhiều phiền toái trong lúc thực thi. Chính vì

vậy, ta chỉ nên sử dụng Trigger trong trường hợp cần thiết. Nếu sử dụng không đúng

không gian và thời gian sẽ khó kiểm soát được những gì do Trigger gây ra. Các ứng dụng nên dùng Trigger:

- Ràng buộc toàn vẹn dữ liệu (Referential Integrity) - Kiểm soát dữ liệu hiện tại (Audit Trails)

- Kiểm soát dữ liệu nhập (Input Check) - Kiểm soát khi xóa dữ liệu (Delete Check)

1) Ràng buộc toàn vẹn dữ liệu (Referential Integrity)

Có 3 thao tác cơ bản làm thay đổi dữ liệu trên các bảng của cơ sở dữ liệu đó là thao tác thêm (insert), thao tác sửa (update) và thao tác xóa (delete). Như vậy để đảm

bảo dữ liệu nhất quán và đúng đắn, ta cần kiểm tra việc thực hiện của 3 thao tác này.

142

Tập bài giảng SQL Server

Các cách kiểm tra ràng buộc dữ liệu: kiểm tra mức giao diện và kiểm tra mức

cơ sở dữ liệu.

- Kiểm tra mức giao diện: Việc kiểm tra được thực hiện tại các chức năng trên

các màn hình giao diện được viết bằng các ngôn ngữ lập trình.

- Kiểm tra mức cơ sở dữ liệu: Việc kiểm tra được thực hiện bởi các đối tượng

Constraint hoặc Trigger.

Trên SQL Server, có 2 cách thực hiện ràng buộc toàn vẹn dữ liệu: - Ràng buộc toàn vẹn dữ liệu bằng phương pháp mô tả (declarative data

integrity). Thực hiện ràng buộc dữ liệu theo phương pháp này chính là các công việc

xác định ràng buộc khóa chính, khóa ngoại, kiểm tra miền giá trị, … và mô tả chúng

tại thời điểm tạo bảng. Đặc điểm cần biết của phương pháp này là việc kiểm tra sẽ

được thực hiện trước khi cho phép ghi vào bảng.

- Ràng buộc toàn vẹn dữ liệu bằng phương pháp theo thủ tục (procedural data

integrity). Trong phương pháp này, việc ràng buộc toàn vẹn dữ liệu được xác định bởi

tập hợp các câu lệnh T-SQL. Các câu lệnh chứa bên trong đối tượng Trigger, chúng sẽ

được gọi thi hành khi có thao tác thêm, xóa, hoặc sửa dữ liệu xảy ra trên bảng tương

ứng. Đặc điểm cần biết của phương pháp này là việc kiểm tra sẽ được thực hiện sau

khi dữ liệu được ghi vào bảng.

Do đó, đối với các ràng buộc toàn vẹn dữ liệu đơn giản chẳng hạn như kiểm tra

các ràng buộc miền giá trị, kiểm tra các ràng buộc giữa các thuộc tính trên cùng một

bảng dữ liệu, … Ta nên sử dụng đối tượng Constraint. Còn đối với các ràng buộc toàn

vẹn dữ liệu phức tạp khác - là những quy tắc được định nghĩa dùng để kiểm tra tính

toàn vẹn của dữ liệu trên nhiều trường hoặc nhiều dòng của các bảng khác nhau. Khi

đó bắt buộc chúng ta phải sử dụng đối tượng Trigger, đối tượng này cho phép chúng ta xây dựng các câu lệnh bên trong nó với mục tiêu là các câu lệnh này sẽ được thực hiện

khi các thao tác làm thay đổi dữ liệu xảy ra trên bảng dữ liệu mà nó gắn. Một trigger

gắn với duy nhất một đối tượng table hoặc một đối tượng view.

2) Kiểm soát dữ liệu hiện tại (Audit Trails) Khi cơ sở dữ liệu chưa được chuẩn hóa (Normalization) thì có thể xảy ra dữ

liệu thừa, chứa ở nhiều vị trí trong cơ sở dữ liệu thì yêu cầu đặt ra là dữ liệu cần cập

nhật thống nhất trong mọi nơi. Trong trường hợp này ta phải sử dụng Trigger.

3) Kiểm soát dữ liệu nhập (Input Check)

Khi có sự thay đổi dữ liệu trên một bảng và chúng ta muốn dữ liệu trên một hay

nhiều bảng khác cũng tự động thay đổi theo cho phù hợp. 4) Kiểm soát khi xóa mẩu tin (Delete Check)

143

Tập bài giảng SQL Server

Khi xóa một mẩu tin của một bảng mà ta muốn kiểm soát việc xóa mẩu tin này

có ảnh hưởng đến các bảng khác hay không.

5.1.3. Các khả năng của Trigger

Một trigger có thể nhận biết, ngăn chặn và huỷ bỏ được những thao tác làm

thay đổi trái phép dữ liệu trong cơ sở dữ liệu. Các thao tác trên dữ liệu (xoá, cập nhật và bổ sung) có thể được trigger phát hiện ra và tự động thực hiện một loạt các thao tác khác trên cơ sở dữ liệu nhằm đảm bảo tính hợp lệ của dữ liệu. Thông qua trigger, ta có thể tạo và kiểm tra được những mối quan hệ phức tạp hơn giữa các bảng trong cơ sở

dữ liệu mà bản thân các ràng buộc không thể thực hiện được.

5.1.4. Cơ chế hoạt động của Trigger

Khi thực hiện việc thêm mới một bản ghi vào một bảng, thao tác này sẽ kích

hoạt một trigger, trigger lưu trữ dữ liệu của bản ghi vừa thêm mới vào một bảng có tên là INSERTED. Tương tự, khi thực hiện việc xóa bản ghi của một bảng, thao tác này sẽ

kích hoạt một trigger, trigger lưu trữ dữ liệu của bản ghi vừa xóa vào một bảng có tên

là DELETED.

Cấu trúc của bảng INSERTED và DELETED hoàn toàn giống với cấu trúc của

bảng dữ liệu liên quan đến trigger khi tạo ra. Các bảng này chỉ được sử dụng với các

lệnh trong trigger. Các bảng này thường được sử dụng để khôi phục lại phần dữ liệu đã

thay đổi (roll back).

Khi thực hiện việc cập nhật dữ liệu trong Microsoft SQL Server thì được xem

như là sự phối hợp của hai lệnh DELETE và INSERT (xóa bỏ dữ liệu cũ và thêm vào

dữ liệu mới sau khi sửa đổi). Do đó, đối với các trigger liên quan đến việc sửa đổi dữ

liệu thì chúng ta có thể tham chiếu đến cả hai bảng trung gian INSERTED và

DELETED.

Dữ liệu trong hai bảng INSERTED và DELETED tuỳ thuộc vào câu lệnh tác

động lên bảng làm kích hoạt trigger:

- Khi câu lệnh DELETE được thực thi trên bảng, các dòng dữ liệu bị xoá sẽ được sao chép vào trong bảng DELETED. Bảng INSERTED trong trường hợp này không có dữ liệu.

- Khi câu lệnh INSERT được thực thi trên bảng, dữ liệu trong bảng INSERTED

sẽ là dòng dữ liệu được bổ sung vào bảng. Bảng DELETED trong trường hợp này không có dữ liệu.

- Khi câu lệnh UPDATE được thực thi trên bảng, các dòng dữ liệu cũ chịu sự

tác động của câu lệnh sẽ được sao chép vào bảng DELETED, còn trong bảng INSERTED sẽ là các dòng sau khi đã được cập nhật.

144

Tập bài giảng SQL Server

5.1.5. Các loại Trigger

Có hai loại Trigger là: INSTEAD OF, AFTER (FOR).

Trigger loại INSTEAD OF sẽ bỏ qua hành động kích hoạt trigger (các thao tác

insert, delete, update), thay vào đó nó sẽ thực hiện các câu lệnh bên trong trigger. Tuy

nó sẽ bỏ qua hành động tác động đến cơ sở dữ liệu nhưng việc lưu trữ dữ liệu vào các bảng INSERTED (đối với thao tác insert), DELETED (đối với thao tác delete) vẫn được thực hiện. Trigger loại INSTEAD OF có thể định nghĩa trên đối tượng table hoặc view. Khi một câu lệnh update tác động đến một bảng chứa trigger loại INSTEAD OF,

các câu lệnh T-SQL bên trong trigger sẽ được thi hành, nó đóng vai trò thay thế câu

lệnh Update. Đặc tính này cho phép ta chỉ định các câu lệnh xử lý phức tạp trong

trigger nhằm làm tăng thêm lệnh thay đổi dữ liệu trên bảng.

Trigger loại AFTER là loại mặc định (cũng chính là loại có từ khóa khai báo FOR), nó có vai trò như là phần bổ sung của hành động kích hoạt trigger. Các câu lệnh

bên trong trigger loại này chỉ được thi hành sau khi hành động kích hoạt đã được thực

hiện rồi. Các ràng buộc toàn vẹn loại mô tả sẽ được thực hiện trước, rồi các câu lệnh

bên trong trigger mới được thực hiện sau. Trigger loại AFTER chỉ được phép định

nghĩa trên duy nhất đối tượng bảng mà không thể định nghĩa trên đối tượng view.

Trên một bảng ta có thể định nghĩa cả hai loại trigger. Nếu định nghĩa cả hai

loại trigger và các constraint cho một bảng, thì thứ tự thực thi sẽ là trigger INSTEAD

OF, các constraint được xử lý và sau cùng là trigger AFTER. Nếu các constraint phát

hiện ra có vi phạm tính toàn vẹn dữ liệu thì các hành động của trigger INSTEAD OF

sẽ được quay lui, còn các hành động của trigger AFTER không được thi hành. Giống

như các thủ tục lưu trữ, trigger có thể được lồng đến 32 cấp và có thể được kích hoạt

đệ quy.

5.1.6. Các đặc trưng và hạn chế của Trigger

1) Đặc trưng:

Từ một trigger có thể xây dựng bên trong nó các câu lệnh tác động lên trường của bảng bất kỳ trong cơ sở dữ liệu hoặc bớt các đối tượng bên ngoài cơ sở dữ liệu hiện hành. Có thể áp dụng trigger cho đối tượng View. Một trigger có thể thực hiện nhiều hành động

(multiple actions), và nó có thể được kích hoạt bởi nhiều hơn một hành động.

2) Hạn chế: Trigger không thể được tạo trên một bảng tạm (temporary bảng) hoặc bảng hệ

thống (system table). Tuy nhiên, các câu lệnh bên trong trigger hoàn toàn có thể tham

chiếu đến nội dung bên trong các bảng tạm và bảng hệ thống. Các trigger loại INSTEAD OF DELETE và INSTEAD OF UPDATE không thể được định nghĩa trên

các bảng có chứa khóa ngoại và trên mối quan hệ nối từ bảng chứa nó thông qua khóa

145

Tập bài giảng SQL Server ngoại đến bảng khác đã có thiết đặt tương ứng trên các mỗi quan hệ có tính chất Cascade Delete Related Records và Cascade Update Related Fieds.

5.2. Ngôn ngữ DLL của Trigger

1) Tạo Trigger

Tác dụng: Dùng để tạo một trigger Cú pháp:

CREATE TRIGGER ON |

[WITH[ENCRYPTION]|[EXECUTE AS Clause]]

FOR|AFTER|INSTEAD OF

[INSERT] [,] [UPDATE] [,] [DELETE]

[NOT FOR REPLICATION] AS

BEGIN

{sql_statement}

END

Trong đó:

- Trigger_name: Là tên của trigger

- Table_Name: Là tên bảng

- View_Name: Là tên View

- ENCRYPTION: Cho phép ngăn ngừa việc sửa đổi nội dung của trigger.

- EXECUTE_AS_Clause: Xác định nội dung bảo mật được thực thi trigger.

- FOR|AFTER|INSTEAD OF: Là các loại trigger.

- INSERT, UPDATE, DELETE: Là các hành động tác động lên bảng hoặc View. - NOT FOR REPLICATION: Nếu thêm câu lệnh vào trigger thì trigger sẽ không

thực hiện trừ khi bảng có liên quan đến kỹ thuật sao chép nhân bản (replication).

Việc tạo trigger bắt đầu với mệnh đề CREATE TRIGGER theo sau là tên của trigger. Trigger không cho phép xác định tên của cơ sở dữ liệu như là tiền tố của tên đối tượng. Do vậy cần chọn cơ sở dữ liệu với mệnh đề USE và từ

khóa GO trước câu lệnh tạo trigger. Cần phải chỉ định từ khóa GO bởi vì câu lệnh

CREATE TRIGGER phải là câu lệnh đầu tiên trong một lô câu truy vấn. Mặc định, quyền chủ sở hữu bảng được phép tạo trigger. Còn nếu ta dùng MS để tạo thì chỉ cần

chọn đúng cơ sở dữ liệu cần tạo trigger. Khi đó ta không cần phải sử dụng mệnh đề

USE . Trong trường hợp muốn tên trigger là một chuỗi gồm có cả các khoảng trắng, bạn phải đặt chúng trong cặp dấu [ ].

Ví dụ: Tạo Trigger chỉ cho phép xóa một thí sinh trong bảng thí sinh.

146

Tập bài giảng SQL Server

Use QLTS GO

CREATE TRIGGER TS_Delete ON Thisinh

FOR DELETE

AS IF (SELECT COUNT(*) FROM Deleted) > 1 BEGIN RAISERROR(

'Khong the xoa nhieu hon mot thi sinh.', 16, 1)

ROLLBACK TRANSACTION

END

2) Thay đổi Trigger Tác dụng: Dùng để sửa Trigger đã tạo.

Cú pháp:

ALTER TRIGGER

ON |

[WITH[ENCRYPTION]|[EXECUTE AS Clause]]

FOR|AFTER|INSTEAD OF

[INSERT] [,] [UPDATE] [,] [DELETE]

[NOT FOR REPLICATION]

AS

BEGIN

{sql_statement}

END

Ví dụ: Sửa Trigger TS_Delete cho phép xóa tối đa thí sinh trong bảng thí sinh.

Use QLTS

GO ALTER TRIGGER TS_Delete ON Thisinh FOR DELETE

AS

IF (SELECT COUNT(*) FROM Deleted) > 5 BEGIN

RAISERROR(

'Khong the xoa nhieu hon mot thi sinh.', 16, 1) ROLLBACK TRANSACTION

END

147

Tập bài giảng SQL Server

3) Xóa trigger Tác dụng: Xóa trigger đã tạo

Cú pháp:

DROP TRIGGER

Với là tên trigger sẽ bị xóa. Ví dụ: Xóa thủ tục có tên là TS_Delete DROP Trigger TS_Delete 4) Làm trigger mất hiệu lực

Tác dụng: Tạm thời tắt trigger (làm cho nó không còn hiệu lực). Ví dụ, cần tắt bớt

đi một số trigger để cô lập vấn đề cần gỡ rối; hoặc cần sửa đổi dữ liệu, chuyển dữ liệu

giữa hai cơ sở dữ liệu, …

Cú pháp: ALTER TABLE

DISABLE TRIGGER [|ALL]

Ví dụ 1: Ngắt trigger TS_Delete khỏi bảng Thisinh

ALTER TABLE Thisinh DISABLE TRIGGER TS_Delete

Ví dụ 2: Ngắt tất cả các trigger khỏi bảng Thisinh

ALTER TABLE Thisinh DISABLE TRIGGER ALL

5) Làm trigger có hiệu lực

Tác dụng: Làm cho trigger có hiệu lực trở lại.

Cú pháp:

ALTER TABLE

ENABLE TRIGGER [|ALL]

Ví dụ 1: Làm cho trigger TS_Delete trong bảng Thisinh có hiệu lực ALTER TABLE Thisinh ENABLE TRIGGER TS_Delete

Ví dụ 2: Làm cho tất cả các trigge trong bảng Thisinh có hiệu lực.

ALTER TABLE Thisinh ENABLE TRIGGER ALL

5.3. Lập trình với Trigger 5.3.1. Bảng trung gian

Từ cơ chế hoạt động của Trigger ta thấy rằng khi có thao tác Insert, Update

hoặc Delete xảy ra trên bảng, các thao tác này sẽ kích hoạt Trigger, hành động sẽ tạo ra một hoặc nhiều bảng trung gian. Các bảng này có thể xem như là các sổ ghi nhận

giao tác (transaction logs) của hành động. Hai bảng trung gian đó là Inserted và

Deleted.

148

Tập bài giảng SQL Server

Bảng Bảng STT Hành động INSERTED DELETED

Dữ liệu được Không có dữ liệu 1 Thêm bản ghi (Insert) thêm vào

2 Xóa bản ghi (Delete) Không có dữ liệu Dữ liệu bị xóa

Dữ liệu được cập Dữ liệu trước khi 3 Cập nhật bản ghi (Update) nhật được cập nhật

Ví dụ 1: Tạo Trigger Trigger_InsertNganh cho bảng Ngành. Khi hành động

insert xảy ra trên bảng Nganh, trigger Trigger_InsertNganh được kích hoạt. Câu lệnh

SELECT bên trong trigger sẽ hiển thị bản ghi chứa trong bảng Inserted và bảng

Deleted.

CREATE TRIGGER Trigger_InsertNganh ON Nganh

AFTER INSERT

AS

BEGIN

select * from inserted

select * from deleted

END Kết quả kiểm tra hoạt động của trigger Trigger_InsertNganh khi hành động

insert được thực thi: Bảng inserted chứa bản ghi vừa được thêm vào và bảng deleted

không có dữ liệu.

Hình 5.1. Kết quả thực hiện hành động Insert

Ví dụ 2: Tạo Trigger Trigger_DeleteNganh cho bảng Ngành. Khi hành động delete xảy ra trên bảng Nganh, trigger Trigger_DeleteNganh được kích hoạt. Câu lệnh

SELECT bên trong trigger sẽ hiển thị bản ghi chứa trong bảng Inserted và bảng Deleted.

CREATE TRIGGER Trigger_DeleteNganh

149

Tập bài giảng SQL Server

ON Nganh AFTER Delete

AS

BEGIN

select * from inserted select * from deleted END Kết quả kiểm tra hoạt động của trigger Trigger_DeleteNganh khi hành động

Delete được thực thi: Bảng inserted không có dữ liệu và bảng deleted chứa bản ghi bị

xóa.

Hình 5.2. Kết quả thực hiện hành động Delete

Ví dụ 3: Tạo Trigger Trigger_UpdateNganh cho bảng Ngành. Khi hành động

update xảy ra trên bảng Nganh, trigger Trigger_UpdateNganh được kích hoạt. Câu lệnh SELECT bên trong trigger sẽ hiển thị bản ghi chứa trong bảng Inserted và bảng

Deleted.

CREATE TRIGGER Trigger_UpdateNganh

ON Nganh

AFTER Update

AS

BEGIN select * from inserted

select * from deleted END Kết quả kiểm tra hoạt động của trigger Trigger_UpdateNganh khi hành động Update được thực thi: Bảng inserted chứa bản ghi được cập nhật và bảng deleted chứa bản ghi trước khi được cập nhật.

150

Tập bài giảng SQL Server

Hình 5.3. Kết quả thực hiện hành động Update

5.3.2. Các lệnh hệ thống và các hàm sử dụng trong trigger

1) Các hàm và các lệnh hệ thống

a) Hàm @@ROWCOUNT: Trả về số dòng bị ảnh hưởng bởi câu lệnh T-SQL

ngay trước đó trong trigger.

b) Câu lệnh RETURN: Nếu không có dòng nào bị ảnh hưởng bởi hàng động

INSERT, UPDATE hoặc DELETE, trigger vẫn kích hoạt. Trong trường hợp này, ta có

thể sử dụng câu lệnh RETURN để chấm dứt việc thi hành không cần thiết các câu lệnh

của trigger. Lệnh RETURN được sử dụng tại các vị trí trong trigger mà tại đó ta muốn

chấm dứt việc thi hành tiếp tục các câu lệnh khác của trigger.

c) Câu lệnh RAISERROR: Được dùng để hiển thị thông báo lỗi hỗ trợ tiếng

việt, dùng để đưa ra màn hình câu thông báo mang tính chất cảnh báo. Chuỗi thông

báo khi sử dụng RAISERROR sẽ được gởi về cho máy khách từ Server.

Cú pháp:

RAISERROR (,

, [,] [,<…n>]) [WITH option [,…n]]

Trong đó:

- Message ID: Số ID của nội dung lỗi trong hệ thống lỗi của SQL Server. Các

thông báo lỗi của hệ thống chứa trong bảng sysmessages.

- Message String: Nội dung của thông báo lỗi. - Serverity: Là Code chỉ dẫn cách phát sinh lỗi. Trong SQL Server, chỉ dẫn lỗi

tùy thuộc vào miền đại diện cho lỗi phát sinh:

STT Miền đại diện Ý nghĩa

1 1-9 Lỗi phát sinh do dữ liệu,

Lỗi phát sinh do dữ liệu, nhưng không xuất lỗi về trình 2 10 khách

3 11-16 Tạm dừng thủ tục và đưa lỗi về cho trình khách

4 17 Lỗi phát sinh do thực hiện ngoài tài nguyên của cơ sở dữ

151

Tập bài giảng SQL Server

STT Miền đại diện Ý nghĩa

liệu.

5 18-19 Lỗi phát sinh do nguyên nhân của hệ thống

Lỗi phát sinh do quá trình kết nối, hay do quá trình 6 20-25 truyền dữ liệu.

- Status: Là giá trị về trạng thái, chỉ rõ lỗi thuộc về nhóm nào trong hệ thống.

Status có giá trị từ 1 đến 27. Giá trị mặc định là 1.

- Argument: Là các tham số được sử dụng để thay thế cho các biến được định

nghĩa trong Message ID hoặc Message String. Có thể là 0 hoặc nhiều tham số thay thế,

nhưng tổng số các tham số thay thế không thể vượt quá 20. Mỗi tham số thay thế có

thể là một biến địa phương hoặc bất kỳ các loại dữ liệu: tinyint, smallint, int, char,

varchar, nchar, nvarchar, nhị phân, hoặc varbinary. Ngoài ra không hỗ trợ loại dữ liệu khác.

- WITH OPTION: Là một lựa chọn tùy chỉnh cho các lỗi và có thể là một trong

những giá trị sau.

Miền STT Ý nghĩa đại diện

Ghi lại những lỗi trong bản ghi lỗi và đăng nhập áp dụng

cho trường hợp của Microsoft SQL Server Database Engine.

Lỗi đăng nhập trong bản ghi lỗi hiện bị giới hạn tối đa của 1 LOG 440 byte. Chỉ có một thành viên với vai trò máy chủ

sysadmin cố định hoặc một người dùng với quyền truy cập

TRACE ALTER mới có thể chỉ định VỚI LOG.

2 NOWAIT Gửi thông báo lỗi ngay lập tức tới máy khách.

Thiết lập @@ERROR và giá trị của ERROR_NUMBER

3 SETERROR

bằng giá trị của Message ID or 50000, bất kể mức độ lỗi là gì.

d) Câu lệnh ROLLBACK TRANSACTION: Được dùng để bỏ qua toàn bộ thao

tác trước đó là nguyên nhân kích hoạt trigger hoặc quay lui toàn bộ lô xử lý (batch) của trigger. Một lỗi không xác định nào đó cũng làm cho quay lui toàn bộ giao tác. Nếu muốn hoàn tất giao tác trong tất cả các trường hợp thì không nên dùng câu lệnh ROLLBACK TRANSACTION, ngoại trừ có lỗi không xác định nào đó xảy ra trong lúc thực hiện giao tác.

Ví dụ: Tạo Trigger để kiểm tra ràng buộc khóa ngoại trên bảng thí sinh với yêu cầu khi thêm mới bản ghi thì sẽ kiểm tra giá trị trên trường mã ngành, nếu giá trị này chưa có trong bảng thì bỏ qua thao tác thêm và hiển thị câu thông báo lỗi.

152

Tập bài giảng SQL Server

CREATE TRIGGER Trigger_Khoa ON thisinh

AFTER INSERT

AS

BEGIN declare @man varchar(20) if @@Rowcount=1 begin

select @man=(select man from inserted)

if not exists

(select 'true' from nganh where man=@man)

begin raiserror('Mã ngành này không có trong bảng ngành',16,1)

rollback tran

return

end

end

else

begin

raiserror('Chỉ cho phép thêm một bản ghi',16,1)

rollback tran

return

end

END

2) Kiểm tra trường được cập nhật

a) Mệnh đề UPDATE

Tác dụng: Xác định có hay không một hành động thêm hoặc cập nhật xảy ra trên một trường. Hàm này chỉ có hiệu lực trong Trigger. Hàm trả về giá trị TRUE nếu trường được cập nhật, trả về giá trị FALSE nếu trường không được cập nhật.

Cú pháp:

UPDATE(Field_Name) Trong đó Field_Name là tên trường

Chú ý: Khi thao tác thêm xảy ra trên một bảng nào đó, thì tất cả các trường trên

bảng đó đều xảy ra cập nhật cho dù có tồn tại một trường mà thao tác thêm ta không hề yêu cầu (trường không được yêu cầu chấp nhận mang giá trị NULL).

Để kiểm tra một trường trong bảng, ta dùng cú pháp:

153

Tập bài giảng SQL Server

If Update(Field_Name) Begin

End

Để kiểm tra nhiều hơn một trường trong bảng, ta dùng cú pháp: If Update(Field_Name1) or Update(Field_Name2) Begin

End

Ví dụ 1: Tạo trigger khi thêm bản ghi cho bảng ngành để kiểm tra nếu có thay

đổi tên ngành thì đưa ra thông báo.

CREATE TRIGGER Trigger_InsertN ON Nganh

AFTER Insert

AS

BEGIN

IF UPDATE(Tenn)

RAISERROR(„Trường tên ngành đã được cập nhật‟,16,1)

END

Trigger Trigger_InsertN được tạo và gắn cho bảng Nganh. Khi thao tác thêm

xảy ra trên bảng Nganh, trigger Trigger_InsertN được kích hoạt. Câu lệnh IF

UPDATE(TenN) dùng để kiểm tra có hay không việc Update trên trường TenN.

UPDATE(TenN) sẽ trả về giá trị là TRUE nếu có Update xảy ra trên trường TenN.

Dùng câu lệnh sau để kiểm tra hoạt động của Trigger: Insert into Nganh

values(„MN012‟)

Khi thực hiện câu lệnh kiểm tra này, trigger sẽ xuất câu thông báo „Truong Tenn da xay ra cap nhat‟. Điều này chứng tỏ có xảy ra việc cập nhật trên TenN, mặc dù thao tác thêm không cập nhật trường TenN.

Ví dụ 2: Tạo Trigger cho bảng MuaBan để kiểm tra khi cập nhật đơn giá bán

của một mặt hàng thì đơn giá bán không thể nhỏ hơn đơn giá nhỏ nhất của mỗi lần bán hàng và không cho phép cập nhật mã khách hàng, mã mặt hàng.

CREATE TRIGGER Trigger_UpdateDG

ON Muaban AFTER update

AS

154

Tập bài giảng SQL Server

BEGIN If update(mamh) or update(makh)

begin

raiserror('Không thể cập nhật mã mặt hàng hoặc mã khách hàng',16,1)

rollback tran end if update(dongia)

begin

if exists

(select 'True' from inserted

where dongia< (select avg(dongia) from muaban where muaban=1)and muaban=1)

begin

raiserror('Đơn giá không hợp lệ',16,1)

rollback tran

end

end

END

b) Mệnh đề COLUMNS_UPDATED

Tác dụng: Cho phép kiểm tra cùng một lúc nhiều trường. Hàm trả về một giá trị

dạng nhị phân có ý nghĩa chỉ ra những trường nào được kiểm tra khi thêm hoặc cập nhật.

Khi làm việc với mệnh đề COLUMNS_UPDATED, ta phải biết được các

trường có thứ tự như thế nào trong bảng. Thứ tự đó được gọi là COLUMN_ID. Để biết được thứ tự của các trường trong một bảng, ta dùng cú pháp sau:

Cú pháp:

SELECT TABLE_NAME, COLUMN_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA+'.'+TABLE_NAME) ,COLUMN_NAME,'ColumnID') AS COLUMN_ID

FROM .INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME = Trong đó:

- DATABASE_NAME: là tên cơ sở dữ liệu chứa bảng cần xem

- Table_Name_IN_DB: là tên bảng dữ liệu cần xem. Ví dụ 1: Xem thứ tự các trường trong bảng ngành

SELECT TABLE_NAME, COLUMN_NAME,

155

Tập bài giảng SQL Server

COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA+'.'+TABLE_NAME) ,COLUMN_NAME, 'ColumnID') AS COLUMN_ID

FROM qlmbh.INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME = 'Muaban'

Kết quả thứ tự các trường của bảng Mua bán:

Hình 5.4. Thứ tự các trường trong bảng Muaban

Ví dụ 2: Xem thứ tự các trường trong bảng thí sinh.

SELECT TABLE_NAME, COLUMN_NAME,

COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA+'.'+TABLE_NAME)

,COLUMN_NAME, 'ColumnID') AS COLUMN_ID

FROM qlts.INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME = 'Thisinh'

Kết quả thứ tự các trường của bảng thí sinh:

Hình 5.5. Thứ tự các trường trong bảng Thisinh

Trường hợp 1: Bảng không có quá 8 trường Để chỉ định những trường nào cần kiểm tra, ta sử dụng một bit mặt nạ (mask)

tượng trưng cho vị trí mỗi trường trong table.

Ta có bảng biểu diễn 8 trường đầu tiên của table và bit mặt nạ được gán cho

mỗi trường.

Trường 1 2 3 4 5 6 7 8

Bít mặt nạ 1 2 4 8 16 32 64 128

156

Tập bài giảng SQL Server

Từ bảng trên, ta có công thức tính bít mặt nạ cho từng trường:

POWER(2,(i-1))=2i-1

Trong đó i là trường thứ i trong bảng dữ liệu.

Để kiểm tra các trường có được cập nhật không thì thông qua một giá trị và giá

trị này được tính như sau:

U=a0*20+a1*21+a2*22+a3*23+a4*24+a5*25+a6*26+a7*27 Trong đó, - U là giá trị tính được - ai =1 nếu trường thứ i+1 cần kiểm tra, ai=0 nếu trường thứ i+1 không cần kiểm tra. - Để kiểm tra trường số 2 có được cập nhật hay không thì U=0*20+1*21+0*22+0*23+0*24+0*25+0*26+0*27=2 - Để kiểm tra trường số 5,6 có được cập nhật hay không thì U=0*20+0*21+0*22+0*23+1*24+1*25+0*26+0*27=48 Cú pháp:

- COLUMNS_UPDATED()>0: Tìm thấy trường được cập nhật

- (COLUMNS_UPDATED() & U)=U hoặc

(COLUMNS_UPDATED() & U) > 0: Tìm thấy tất cả các trường được cập nhật.

- (COLUMNS_UPDATED() | U)!=U: Tìm thấy bất kỳ trường khác không chỉ

định được cập nhật.

Ví dụ 1:

- Để kiểm tra một trong các trường trong bảng mua bán có được cập nhật hay

không thì ta dùng đoạn lệnh:

If COLUMNS_UPDATED()>0

- Để kiểm tra tất cả các trường số lượng, đơn giá trong bảng mua bán có được

cập nhật hay không thì ta dùng đoạn lệnh:

If COLUMNS_UPDATED() & 48)=48, hoặc

If COLUMNS_UPDATED() & 48)>0

- Để kiểm tra chỉ cho phép cập nhật trường số lượng, đơn giá trong bảng mua

bán thì ta dùng đoạn lệnh.

If (COLUMNS_UPDATED() | 48)!=48

Ví dụ 2: Tạo Trigger cho bảng Mua bán kiểm tra trường số lượng và đơn giá có

cùng được cập nhật hay không.

Create TRIGGER Trigger_ColumnUpdate1

ON muaban AFTER UPDATE

AS

157

Tập bài giảng SQL Server

BEGIN if @@rowcount>0 begin if (columns_updated()& 48)=48

begin raiserror('Đã cập nhật cả hai trường số lượng và đơn giá',10,1) end

end END Ví dụ 3: Tạo Trigger cho bảng Mua bán chỉ cho phép cập nhật trường số lượng và đơn giá trong bảng mua bán. Create TRIGGER Trigger_ColumnUpdate2 ON muaban AFTER UPDATE AS BEGIN if @@rowcount>0 begin if (columns_updated()|48)!=48

begin raiserror('Chỉ cho phép có cập nhật trường số lượng và đơn giá',10,1) rollback tran end

else begin

update dbo.muaban set dongia=inserted.dongia, soluong=inserted.soluong from muaban inner join inserted on muaban.mamh=inserted.mamh and muaban.makh=inserted.makh end

end END Trường hợp 2: Bảng có quá 8 trường. Ta sử dụng hàm SUBSTRING để trigger hiểu bit mặt nạ cần kiểm tra.

158

Tập bài giảng SQL Server

- Nếu trường kiểm tra là một trường thuộc 8 trường đầu tiên: Cú pháp:

(SUBSTRING(COLUMNS_UPDATED(),1,1) =power(2,(COLUMN_ID-1)))

- Nếu trường kiểm tra là một trường khác 8 trường đầu tiên, trường thứ 9 sẽ bắt

đầu lại tương ứng là 1. Cú pháp:

(SUBSTRING(COLUMNS_UPDATED(),2,1) =power(2,(COLUMN_ID-1)))

Ví dụ 1: Tạo Trigger để kiểm tra trường họ tên và trường quê quán trong bảng

thí sinh có được cập nhật hay không.

CREATE TRIGGER Trigger_UpdateColumn ON Thisinh instead of UPDATE AS BEGIN if (SUBSTRING(COLUMNS_UPDATED(),1,1) =power(2,(2-1))+power(2,(5-1)))

begin raiserror('Cập nhật đã xẩy ra trên trường họ tên và quê quán',16,1) end END Ví dụ 2: Tạo Trigger để kiểm tra trường điểm toán, điểm lý, điểm hóa, mã ưu

tiên, mã ngành trong bảng thí sinh có được cập nhật hay không.

CREATE TRIGGER Trigger_UpdateColumn1 ON Thisinh For UPDATE AS BEGIN if ((SUBSTRING(COLUMNS_UPDATED(),1,1)

=power(2,(6-1))+power(2,(7-1))+power(2,(8-1)) ) and ((SUBSTRING(COLUMNS_UPDATED(),2,1) =power(2,(1-1))+power(2,(2-1))))) begin raiserror('Cập nhật đã xảy ra trên trường điểm toán, điểm lý, điểm hóa, mã ưu tiên, mã ngành',16,1) end

159

Tập bài giảng SQL Server

END 3) Các câu lệnh T-SQL không sử dụng được trong một trigger Các câu lệnh không sử dụng được trong một trigger: ALTER, CREATE,

DROP, RESTORE và LOAD DATABASE: - LOAD và RESTORE LOG - DISK RESIZE và DISK INIT - RECONFIGURE

5.3.3. Các thao tác lập trình trigger

1) Trigger lồng nhau Trigger lồng nhau là loại trigger mà bên trong trigger ta có thể thực hiện các lệnh INSERT, UPDATE, DELETE để cập nhật dữ liệu của các bảng khác. Các lệnh này sẽ làm kích hoạt các trigger liên quan khác (nếu có) và cứ thế các trigger có thể gọi thực hiện lồng nhau.

Cấp độ lồng tối đa của các trigger không vượt quá 32 cấp. Ta có thể dùng biến hệ thống @@NESTLEVEL để biết được cấp độ lồng hiện hành của trigger. Mặc định các trigger được phép lồng nhau. Tuy nhiên, ta cũng có thể tạm thời tắt chế độ lồng của trigger bằng lệnh: EXEC sp_configure „nested triggers‟,0. Ta cũng có thể bật trở lại chế độ lồng nhau của trigger bằng lệnh: EXEC sp_configure „nested triggers‟,1.

2) Khi thêm mới bản ghi Trigger của hành động này sẽ tự động kích hoạt khi dữ liệu trong bảng được thêm mới vào bảng dữ liệu. Khi thêm mới các bản ghi, trigger thường kiểm tra ràng buộc toàn vẹn dữ liệu:

- Khóa chính. - Khóa ngoại. - Miền giá trị. - Liên thuộc tính trong cùng một bảng. - Liên thuộc tính của nhiều bảng khác nhau. Khi các giá trị dữ liệu thêm mới vi phạm các ràng buộc toàn vẹn dữ liệu thì trigger sẽ thông báo cho người dùng biết và không lưu lại các thông tin của dòng dữ liệu vừa được thêm mới vào bên trong bảng. Trong các trigger thêm mới dữ liệu thì các dữ liệu vừa mới thêm vào sẽ được lưu trữ tạm thời trong bảng Inserted. Do đó, ta sẽ tham chiếu đến bảng Inserted để lấy ra các giá trị dữ liệu vừa mới thêm dùng trong những kiểm tra ràng buộc toàn vẹn dữ liệu.

Ví dụ 1: Xây dựng trigger trong bảng thí sinh để kiểm tra các ràng buộc toàn vẹn dữ

liệu khi người dùng thêm mới một thí sinh. Các ràng buộc toàn vẹn dữ liệu bao gồm:

Khóa chính: Kiểm tra số báo danh đã tồn tại trong bảng thí sinh không.

160

Tập bài giảng SQL Server

Khóa ngoại: Kiểm tra mã ngành có tồn tại trong bảng ngành không, mã ưu tiên

có tồn tại trong bảng ưu tiên không.

Miền giá trị: Kiểm tra điểm toán, điểm lý, điểm hóa phải lớn hơn hoặc bằng 0

và nhỏ hơn hoặc bằng 10.

begin set @kt=0 raiserror('Số báo danh đã tồn tại trong bảng thí sinh',16,6) end

CREATE TRIGGER Trigger_Insert_TS ON Thisinh for INSERT AS BEGIN declare @kt bit declare @sbd nvarchar(15) declare @dt float, @dh float, @dl float set @kt=1 set @sbd = (select sbd from inserted) if (select count(*) from thisinh where sbd=@sbd)>1 if not exists (select * from inserted, nganh where inserted.man=nganh.man)

begin set @kt=0 raiserror('Mã ngành không tồn tại trong bảng ngành',16,6) end

if not exists (select * from inserted, uutien where inserted.maut=uutien.maut)

begin set @kt=0 raiserror('Mã ưu tiên không tồn tại trong bảng ưu tiên',16,6) end

select @dt = (select dtoan from inserted),@dl = (select dly from inserted),@dh = (select dhoa from inserted) if @dt<0 or @dt>10 begin set @kt=0 raiserror('Điểm toán không hợp lệ',16,6) end

if @dl<0 or @dl>10

161

Tập bài giảng SQL Server

begin set @kt=0 raiserror('Điểm lý không hợp lệ',16,6) end

if @dh<0 or @dh>10 begin set @kt=0 raiserror('Điểm hóa không hợp lệ',16,6) end if @kt=0

begin rollback tran raiserror('Không thêm được thông tin vào bảng thí sinh',16,6) end

else

begin raiserror('Đã thêm được thông tin vào bảng thí sinh',16,6) end

END Để kiểm tra các hoạt động bên trong trigger có đúng hay không, ta cần phải lần lượt thực hiện các lệnh INSERT INTO để thêm dữ liệu vào bảng Thí sinh cho các trường hợp mà ta đã kiểm tra trong trigger.

Trường hợp 1: Vi phạm ràng buộc toàn vẹn khóa chính, khóa ngoại và miền giá trị.

Trường hợp 2: Không vi phạm ràng buộc toàn vẹn khóa chính, khóa ngoại và

miền giá trị.

162

Tập bài giảng SQL Server

Ví dụ 2: Xây dựng trigger trong bảng mượn trả để kiểm tra các ràng buộc toàn

vẹn dữ liệu khi người dùng thêm mới một bản ghi. Các ràng buộc toàn vẹn dữ liệu bao

gồm:

Khóa ngoại: Kiểm tra mã độc giả có tồn tại trong bảng độc giả không, mã sách

có tồn tại trong bảng sách không.

Liên thuộc tính trong cùng một bảng: - Kiểm tra ngày mượn phải nhỏ hơn hoặc bằng ngày hiện tại, ngày mượn phải

nhỏ hơn hoặc bằng ngày hẹn trả và ngày trả.

- Ngày hẹn trả lớn hơn hoặc bằng ngày mượn, ngày hẹn trả phải nhỏ hơn hoặc

bằng ngày trả.

- Ngày trả phải lớn hơn hoặc bằng ngày mượn, ngày trả phải lớn hơn hoặc bằng

ngày hẹn trả.

CREATE TRIGGER Trigger_Insert_MT ON muontra

For INSERT

AS

BEGIN

declare @kt bit

declare @ngaym datetime, @ngayt datetime, @ngayht datetime

set @kt=1 if not exists (select * from inserted, docgia where inserted.madg=docgia.madg) begin

set @kt=0 raiserror('Mã độc giả không tồn tại trong bảng độc giả',16,6) end

if not exists (select * from inserted, sach where inserted.masach=sach.masach)

begin set @kt=0

raiserror('Mã sách không tồn tại trong bảng sách',16,6)

163

Tập bài giảng SQL Server

end

set @ngaym = (select ngaymuon from inserted)

set @ngayht = (select ngayht from inserted)

set @ngayt = (select ngaytra from inserted)

if @ngaym@ngayt or @ngaym>@ngayht begin set @kt=0 raiserror('Ngày mượn không hợp lệ',16,6)

end

if @ngayht<@ngaym or @ngayht>@ngayt

begin

set @kt=0 raiserror('Ngày hẹn trả không hợp lệ',16,6)

end

if @ngayt<@ngayht

begin

set @kt=0

raiserror('Ngày trả không hợp lệ',16,6)

end

if @kt=0

begin

rollback tran

raiserror('Không thêm được thông tin vào bảng mượn trả',16,6)

end

else

begin

raiserror('Đã thêm được thông tin vào bảng mượn trả',16,6) end

END

Trường hợp 1: Vi phạm ràng buộc toàn vẹn khóa ngoại và liên thuộc tính trong

cùng một bảng.

164

Tập bài giảng SQL Server

Trường hợp 2: Không vi phạm ràng buộc toàn vẹn khóa ngoại và liên thuộc tính

trong cùng một bảng.

2) Khi xóa bản ghi

Trigger của sự kiện này sẽ tự động kích hoạt khi dữ liệu bên trong bảng bị xóa.

Khi đó, trong trigger sẽ có một số các kiểm tra ràng buộc toàn vẹn dữ liệu như là: kiểm

tra ràng buộc toàn vẹn dữ liệu khóa ngoại dùng để xóa tự động dữ liệu bên bản con có

liên quan hoặc thông báo lỗi đã vi phạm ràng buộc toàn vẹn khi xóa dữ liệu bên bảng

cha.

Khi giá trị dữ liệu trong bảng bị xóa nếu có vi phạm ràng buộc toàn vẹn dữ liệu

khóa ngoại thì trigger sẽ thông báo cho người dùng biết và không hủy thông tin của

các dòng dữ liệu. Trong các trigger hủy bỏ dữ liệu thì dữ liệu vừa bị hủy bỏ sẽ được

lưu trữ tạm thời trong bảng Deleted. Ta sẽ tham chiếu đến bảng Deleted để lấy ra giá

trị của các dữ liệu vừa bị hủy bỏ dùng cho các kiểm tra ràng buộc toàn vẹn dữ liệu khóa ngoại.

Ví dụ 1: Xây dựng trigger trong bảng ngành để kiểm tra các ràng buộc toàn vẹn dữ liệu khi người dùng xóa một ngành. Cần phải kiểm tra các ràng buộc toàn vẹn dữ liệu như sau:

Kiểm tra xem ngành học bị xóa đã có thí sinh nào đăng kí hay chưa. Nếu đã có

thí sinh đăng kí ngành học này thì không xóa. Ngược lại thì xóa ngành học này.

CREATE TRIGGER Trigger_Del_NH ON Nganh AFTER DELETE

165

Tập bài giảng SQL Server

AS BEGIN

declare @man nvarchar(15)

select @man=(select man from deleted)

if (select count(*) from deleted)>0 begin

if exists (select * from thisinh where man=@man) begin

rollback tran

raiserror('Không thể xóa ngành học này',16,6)

end

else begin

raiserror('Ngành học này đã bị xóa',16,6)

end

end

else

begin

raiserror('Không tồn tại ngành học này',16,6)

end

END

Trường hợp 1: Không có ngành học trong bảng ngành.

Trường hợp 2: Tồn tại ngành học trong bảng thí sinh.

166

Tập bài giảng SQL Server

Trường hợp 3: Xóa được ngành học trong bảng ngành

Ví dụ 2: Xây dựng trigger trong bảng độc giả để kiểm tra các ràng buộc toàn

vẹn dữ liệu khi người dùng xóa một độc giả. Cần phải kiểm tra các ràng buộc toàn vẹn

dữ liệu như sau:

Kiểm tra xem độc giả bị xóa có mượn sách không. Nếu thí sinh có mượn sách

thì xóa các thông tin liên quan đến thí sinh này trong bảng mượn trả.

CREATE TRIGGER Trigger_DEL_DG

ON Docgia

AFTER DELETE

AS

BEGIN

declare @madg nvarchar(15)

declare @sbg integer declare @sbgs nvarchar(15)

select @madg=(select madg from deleted)

if (select count(*) from deleted)>0 begin

raiserror('Độc giả này đã bị xóa',16,6) if exists (select * from muontra where madg=@madg) begin select @sbg=(select count(*) from muontra where madg=@madg)

167

Tập bài giảng SQL Server

delete from muontra where madg=@madg select @sbgs=(CONVERT(nvarchar(10),@sbg)+' Bản ghi trong

bảng mượn trả đã bị xóa')

raiserror(@sbgs,16,6)

end

end else begin

raiserror('Không có độc giả này',16,6)

end

END

Trường hợp 1: Không có độc giả trong bảng độc giả.

Trường hợp 2: Độc giả chưa mượn sách lần nào.

Trường hợp 3: Thông tin có trong cả hai bảng độc giả, mượn trả.

168

Tập bài giảng SQL Server

3) Khi cập nhật bản ghi Trigger của sự kiện này sẽ tự động kích hoạt khi dữ liệu trong bảng bị sửa đổi.

Trong trigger sẽ có một số các kiểm tra ràng buộc toàn vẹn dữ liệu như là: kiểm tra

ràng buộc toàn vẹn dữ liệu khóa ngoại, miền giá trị, liên thuộc tính trong cùng một

bảng dữ liệu, liên thuộc tính của nhiều bảng dữ liệu khác nhau. Tuy nhiên, ta nên hạn chế việc sửa đổi dữ liệu, chỉ cho phép người sử dụng sửa đổi dữ liệu trên một số cột nhất định nào đó bên trong bảng.

Để kiểm tra giá trị dữ liệu của một cột bên trong bảng có bị thay đổi trong các

trigger sửa đổi dữ liệu, ta sẽ sử dụng hàm UPDATE. Hành động sửa đổi dữ liệu bên

dưới của Microsoft SQL Server thực chất là sự kết hợp của hai hành động đi kèm là

xóa dữ liệu cũ hiện có và thêm lại dữ liệu mới đã được sửa đổi. Do đó, bên trong

trigger sửa đổi dữ liệu khi đó bảng Inserted sẽ chứa đựng dữ liệu mới sau khi sửa đổi và bảng Deleted sẽ chứa đựng dữ liệu cũ trước khi sửa đổi. Thông thường trong trigger

sửa đổi chúng ta có thể tham chiếu đến cùng lúc hai bảng Inserted và Deleted.

Ví dụ: Xây dựng trigger trong bảng hồ sơ để kiểm tra các ràng buộc toàn vẹn

dữ liệu khi người dung cập nhật một bản ghi. Cần phải kiểm tra các ràng buộc toàn

vẹn dữ liệu như sau:

Không cho phép cập nhật mã nhân viên. Ngày vào ngành phải lớn hơn ngày

sinh.

CREATE TRIGGER Trigger_Update_HS

ON Hoso

AFTER UPDATE

AS

BEGIN declare @ngayvn as date

declare @ngays as date

if (select count(*) from inserted)>0 begin

if update(manv)

raiserror('Không thể cập nhật mã nhân viên',16,1) begin

rollback tran

end if update(ngayvn)

begin

169

Tập bài giảng SQL Server select @ngayvn=(select ngayvn from inserted) select @ngays=(select ngaysinh from inserted)

if @ngayvn<@ngays

begin

raiserror('Ngày vào ngành không hợp lệ',16,1) rollback tran end

end

end

else

begin

raiserror('Không có nhân viên này',16,1)

end

END

Trường hợp 1: Ngày vào ngành không hợp lệ.

Trường hợp 2: Không thể cập nhật mã nhân viên.

Trường hợp 3: Không có nhân viên này trong bảng hồ sơ.

170

Tập bài giảng SQL Server

Trường hợp 4: Thỏa mãn các điều kiện cập nhật.

4) Khi cập nhật giá trị tự động

Khi dữ liệu bị cập nhật bởi người sử dụng, ngoài việc kiểm tra các ràng buộc

toàn vẹn dữ liệu, bên trong trigger còn có thêm một tính năng ưu việt nữa đó là việc

tính toán các giá trị và cập nhật tự động vào các cột của một bảng dữ liệu nào đó.

Thông thường dữ liệu của các bảng này được hình thành dựa vào số liệu của một hoặc

nhiều bảng khác bên trong cơ sở dữ liệu. Ta không nên viết các xử lý cập nhật giá trị

tự động này thành một trigger mới hoàn toàn mà chỉ cần bổ sung các xử lý này vào

bên dưới trong các trigger đã có. Bởi vì các xử lý cập nhật giá trị tự động chỉ được

thực hiện khi nào các ràng buộc toàn vẹn dữ liệu đã được kiểm tra hợp lệ trước đó.

a) Khi thêm mới bản ghi:

Khi giá trị của các dữ liệu thêm mới đã được kiểm tra hợp lệ so với các ràng buộc toàn vẹn dữ liệu thì các dữ liệu này sẽ được cập nhật thay đổi giá trị tại một trường nào đó của các bảng liên quan.

Ví dụ: Tạo Trigger cho bảng xuất hàng khi thêm một bản ghi mới. Ta cần kiểm

tra các ràng buộc toàn vẹn dữ liệu:

- Kiểm tra số lượng xuất phải nhỏ hơn hoặc bằng số lượng nhập. - Kiểm tra đơn giá xuất phải lớn hoặc bằng đơn giá nhập. Nếu tất cả các ràng buộc toàn vẹn dữ liệu ở trên đều hợp lệ thì thay đổi giá trị

của trường số lượng tồn kho trong bảng tồn kho. CREATE TRIGGER Trigger_Insert_Xuat ON Xuat

171

Tập bài giảng SQL Server AFTER INSERT AS

BEGIN

declare @mamh as nvarchar(50)

declare @slx as float declare @sln as float declare @dgx as float declare @dgn as float

set @mamh=(select mamh from inserted)

if (select count(*) from nhap where mamh=@mamh)>0

begin set @slx=(select slx from inserted)

set @dgx=(select dgx from inserted)

set @sln=(select sln from nhap where mamh=@mamh)

set @dgn=(select dgn from nhap where mamh=@mamh)

if @slx>@sln or @dgn>@dgx

begin

rollback tran

raiserror('Số lượng xuất, đơn giá xuất không hợp lệ',16,2)

end

else

begin

update tonkho set slt=slt-@slx

where mamh=@mamh

end

end else

begin

rollback tran raiserror('Không tồn tại mặt hàng này',16,2)

end

END Trường hợp 1: Thêm thành công

172

Tập bài giảng SQL Server

Trường hợp 2: Không thêm bản ghi vào được bảng xuất

Trường hợp 3: Không tồn tại mặt hàng này.

b) Khi xóa bản ghi:

Ngược lại với việc thêm mới, khi giá trị các dòng dữ liệu trong bảng bị hủy bỏ

thì ta cập nhật thay đổi giá trị tại cột nào đó của các bảng liên quan.

Ví dụ: Tạo Trigger cho bảng xuất hàng khi xóa một bản ghi. Khi một bản ghi bị

xóa thì phải thay đổi giá trị của trường số lượng tồn kho trong bảng tồn kho. CREATE TRIGGER Trigger_DEL_xuat ON Xuat AFTER Delete AS BEGIN

declare @mamh as nvarchar(50)

173

Tập bài giảng SQL Server declare @slx as float set @mamh=(select mamh from deleted)

if (select count(*) from nhap where mamh=@mamh)>0

begin

set @slx=(select slx from deleted) update tonkho set slt=slt+@slx where mamh=@mamh

end

else

begin

rollback tran raiserror('Không tồn tại mặt hàng này',16,2)

end

END

Trường hợp 1: Không tồn tại mặt hàng này.

Trường hợp 2: Thực hiện việc xóa và cập nhật dữ liệu thành công.

c) Khi cập nhật bản ghi: Sau khi bản ghi được sửa đổi, ta phải tính toán để cập nhật lại giá trị các cột của các bảng có liên quan khớp với giá trị mới vừa được sửa đổi. Việc cập nhập này có thể là tăng hoặc giảm so với giá trị cũ trước đó hoàn toàn tùy thuộc vào giá trị chênh lệch

giữa giá trị mới được sửa đổi và giá trị cũ trước đó.

174

Tập bài giảng SQL Server

Vì vậy, nguyên tắc chung trong các trigger sửa đổi dữ liệu là cập nhật lại giá trị chênh lệch sau khi và trước khi sửa đổi dữ liệu, tùy thuộc vào số chênh lệch này là âm

hoặc dương mà giá trị được cập nhật sẽ giảm hoặc tăng so với giá trị hiện hành.

Ví dụ 1: Tạo Trigger cho bảng nhập hàng khi cập nhật một bản ghi. Ta cần

kiểm tra các ràng buộc toàn vẹn dữ liệu:

- Không cho phép cập nhật mã mặt hàng, tên mặt hàng. - Kiểm tra số lượng nhập phải lớn hơn hoặc bằng số lượng xuất. - Kiểm tra đơn giá nhập phải nhỏ hơn đơn giá xuất.

Nếu tất cả các ràng buộc toàn vẹn dữ liệu ở trên đều hợp lệ thì thay đổi giá trị

của trường số lượng tồn kho trong bảng tồn kho.

CREATE TRIGGER Trigger_Update_Nhap

ON Nhap AFTER Update

AS

BEGIN

declare @mamh as nvarchar(50)

declare @slx as float

declare @sln as float

declare @dgx as float

declare @dgn as float

if (COLUMNS_UPDATED() & 3) > 0

begin

rollback tran

raiserror('Không cho phép cập nhật mã mặt hàng, tên mặt hàng',16,2)

end

else

begin set @mamh=(select mamh from inserted) if (select count(*) from nhap where mamh=@mamh)>0

begin

set @sln=(select sln from inserted) set @dgn=(select dgn from inserted)

set @slx=(select slx from xuat where mamh=@mamh)

set @dgx=(select dgx from xuat where mamh=@mamh) if @slx>@sln or @dgn>@dgx

begin

175

rollback tran raiserror('Số lượng nhập, đơn giá nhập không hợp lệ',16,2) Tập bài giảng SQL Server

end

else

begin update tonkho set slt=@sln-@slx where mamh=@mamh

end

end

else

begin rollback tran

raiserror('Không tồn tại mặt hàng này',16,2)

end

end

END

Trường hợp 1: Số lượng nhập, đơn giá nhập không hợp lệ

Trường hợp 2: Thực hiện việc cập nhật thành công.

Trường hợp 3: Không tồn tại mặt hàng này.

176

Tập bài giảng SQL Server

Trường hợp 4: Không cho phép cập nhật tên mặt hàng.

Ví dụ 2: Xây dựng trigger trong bảng phòng ban để kiểm tra các ràng buộc toàn

vẹn dữ liệu khi người dùng cập nhật một bản ghi. Cần phải kiểm tra các ràng buộc

toàn vẹn dữ liệu như sau:

Khi cập nhật mã phòng trong bảng phòng ban thì mã phòng trong bảng lương

cũng được cập nhật theo.

CREATE TRIGGER TriggerUpdate_Phong

ON Phong

AFTER UPDATE

AS

BEGIN

declare @mapmoi as nvarchar(10) declare @mapcu as nvarchar(10) select @mapmoi=(select maphong from inserted)

select @mapcu=(select maphong from deleted) if (select count(*) from deleted)>0 begin

update luong set maphong=@mapmoi where maphong=@mapcu

raiserror('Mã phòng trong bảng lương đã được cập nhật',16,1)

177

raiserror('Mã phòng trong bảng phòng đã được cập nhật',16,1)

Tập bài giảng SQL Server end

else

begin

raiserror('Không có phòng này',16,1)

end END

Trường hợp 1: Có phòng trong bảng phòng để cập nhật.

Trường hợp 2: Không có phòng trong bảng phòng để cập nhật.

Tóm lại, việc phân chia, tổ chức các kiểm tra ràng buộc toàn vẹn dữ liệu phức tạp hoặc các cập nhật dữ liệu tự động trong đối tượng trigger sẽ làm cho các xử lý được tập trung tại máy chủ và độc lập với ngôn ngữ lập trình tại máy trạm. Điều này

làm cho tốc độ của các ứng dụng theo mô hình khách chủ được nhanh hơn.

5.4. Thao tác với Trigger 1) Tạo Trigger - Dùng công cụ MS Bước 1: Chọn tên cơ sở dữ liệu/Chọn Tables/Chọn tên bảng/Chọn

Triggers/Chọn chuột phải/Chọn New Trigger.

178

Tập bài giảng SQL Server

Hình 5.6. Tạo Trigger

Bước 2: Viết đoạn mã lệnh để tạo Trigger.

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 Trigger.

- Dùng câu lệnh T-SQL

, xuất hiện cửa sổ New Query

Bước 1: Chọn nút New Query Bước 2: Viết đoạn mã lệnh để tạo Trigger.

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 Trigger.

Hình 5.7. Kết quả tạo Trigger

179

Tập bài giảng SQL Server

2) Thay đổi trigger Cách 1: Chọn tên trigger/Chọn chuột phải/Chọn Modify.

Cách 2: Dùng câu lệnh Alter Trigger.

3) Xóa trigger

Cách 1: Chọn tên trigger/Chọn chuột phải/Chọn Delete/Chọn OK. Cách 2: Dùng câu lệnh Drop Trigger. 4) Làm trigger mất hiệu lực Cách 1: Chọn tên trigger/Chọn chuột phải/Chọn Disable.

Cách 2: Dùng câu lệnh.

5) Làm trigger có hiệu lực

Cách 1: Chọn tên trigger/Chọn chuột phải/Chọn Enable.

Cách 2: Dùng câu lệnh.

180

Tập bài giảng SQL Server

Chƣơng 6 SAO LƢU VÀ PHỤC HỒI DỮ LIỆU

6.1. Khái niệm sao lƣu cơ sở dữ liệu

Sao lưu dữ liệu là việc tạo ra các bản sao của dữ liệu gốc, cất giữ ở một nơi an

toàn. Cơ sơ dữ liệu luôn là kho thông tin vô cùng quan trọng đối với bất kỳ một doanh

nghiệp hay tổ chức sử dụng chúng. Chúng có thể bị hỏng hóc một phần hay toàn bộ bất kỳ lúc nào cho dù cơ sở hạ tầng về công nghệ thông tin nói chung và máy chủ chứa

cơ sở dữ liệu nói riêng có tốt đến đâu thì việc sự cố bất thường xảy ra là điều khó tránh

khỏi. Dữ liệu có thể bị mất hoặc bị xâm nhập trái phép bới các nguyên nhân như thiết

bị lưu trữ bị hỏng, do người dùng vô tình xóa hay do kẻ xấu cố ý phá hoại cơ sở dữ

liệu. Vì vậy người quản trị cơ sở dữ liệu cần phải có kế hoạch sao lưu để tránh và giảm thiểu rủi ro cho cơ sở dữ liệu.

SQL Server 2008 cung cấp chức năng sao lưu và phục hồi dữ liệu rất hoàn hảo,

chúng ta có thể thao tác trực tiếp hay theo lịch trình định sẵn.

6.1.1.Các loại bản sao lưu cơ sở dữ liệu

1) Full backup: Full backup là một bản sao lưu đầy đủ của cơ sở dữ liệu tr ên các phương tiện

lưu trữ. Quá trình full backup có thể tiến hành mà không cần ẩn cơ sở dữ liệu, nhưng

quá trình này lại chiếm một lượng lớn tài nguyên hệ thống và có thể ảnh hưởng

nghiêm trọng tới thời gian đáp ứng các y êu cầu của hệ thống.

2) Diferential backup:

Differential backup được xây dựng nhằm làm giảm thời gian cần thiết để thực

hiện quá trình full backup. Differential backup ch ỉ sao lưu những thay đổi tr ên dữ

liệu kể từ lần full backup gần nhất. Trong những hệ thống CSDL lớn, quá trình

differential backup sẽ sử dụng tài nguyên ít hơn rất nhiều so với quá trình full backup

và có th ể không ảnh hưởng đến hiệu suất của hệ thống.

Quá trình differential chỉ sao lưu những sự thay đổi của dữ liệu từ lần full

backup gần nhất, do đó khi có sự cố với cơ sở dữ liệu nếu không có bản sao lưu của quá trình full backup thì b ản sao lưu của quá trình differential backup s ẽ trở nên vô

nghĩa.

Ví dụ trong chương trình Quản lý tuyển sinh của một trường Đại học, ta thực

hiện full backup v ào cuối ngày thứ 6 hàng tuần và thực hiện differential backup

vào t ối các ngày từ thứ 2 tới thứ 5. Nếu cơ sở dữ liệu có sự cố v ào sáng thứ 4, quản trị viên cơ sở dữ liệu sẽ phục hồi dữ liệu bằng bản sao lưu của quá trình full

backup c ủa ngày thứ 6 tuần trước và sau đó phục hồi các thay đổi của dữ liệu bằng

181

Tập bài giảng SQL Server cách áp dụng bản sao lưu của quá trình differential backup vào ngày thứ 3.

3) Transaction log backup:

Quá trình full bac kup và differential backup chiếm nhiều tài nguyên hệ

thống và ảnh hưởng đến hiệu suất làm việc hệ thống nên thường được thực hiện

vào sau giờ làm việc. Tuy nhiên điều này có thể dẫn đến các mất mát dữ liệu trong một ng ày làm việc nếu cơ sở dữ liệu có sự cố trước khi quá trình sao lưu diễn ra. Transaction log backup là một giải pháp nhằm giảm thiểu tối đa lượng dữ liệu có thể mất khi có sự cố cơ sở dữ liệu.

Trong quá trình hoạt động, SQL Server sử dụng transaction log để theo dõi tất

cả các thay đổi trên cơ sở dữ liệu. Log bảo đảm cơ sở dữ liệu có thể phục hồi sau

những sự cố đột xuất và cũng đảm bảo người dùng có thể quay ngược các kết quả

trong các giao tác cơ sở dữ liệu. Các giao tác chưa hoàn thành được lưu trong log trước khi được lưu vĩnh viễn trong cơ sở dữ liệu.

Transaction log backup sao lưu transaction log của cơ sở dữ liệu vào thiết bị

lưu trữ. Mỗi khi transaction log đư ợc sao lưu, SQL Server b ỏ đi các transaction

đã thực hiện thành công (committed tracsaction) và ghi các transaction vào phương

tiện sao lưu. Transaction log backup sử dụng tài nguyên hệ thống ít hơn rất nhiều so

với full backup và differential backup , do đó có thể sử dụng transaction log backup

bất kỳ thời gian n ào mà không s ợ ảnh hưởng đến hiệu suất hệ thống.

Trở lại với ví dụ cơ sở dữ liệu quản lý tuyển sinh. Trường Đại học này thực

hiện full backup vào tối thứ 6 và differential backup vào tối từ thứ 2 tới thứ 5.

Trường Đại học thực hiện thêm quá trình transaction log backup mỗi giờ một lần.

Giả sử sự cố cơ sở dữ liệu xảy ra vào 9h:05 sáng thứ 4. Quá trình khôi phục lại cơ

sở dữ liệu như sau: Dùng full backup và differential backup của tối thứ 6 và tối thứ 3 để phục hồi lại trạng thái cơ sở dữ liệu vào tối thứ 3. Tuy nhiên quá trình này v ẫn

còn để mất dữ liệu trong 2 giờ (7 – 9h) sáng thứ 4. Tiếp theo sử dụng 2 bản sao lưu

transaction backup lúc 8h và 9h sáng để khôi phục CSDL về trạng thái lúc 9h sáng thứ 4.

6.1.2. Thực hiện sao lưu

Bước 1: Chọn cơ sở dữ liệu/Chọn chuột phải/Chọn Tasks/Chọn Back up….

182

Tập bài giảng SQL Server

Hình 6.1. Sao lưu cơ sở dữ liệu

Bước 2: Chọn loại Backup trong mục Backup type

- Chọn loại Full nếu muốn tạo bản sao Full Backup

- Chọn loại Differental nếu muốn tạo bản sao Differental

- Chọn loại Transaction Log nếu muốn tạo bản sao Transaction Log

Hình 6.2. Loại sao lưu cơ sở dữ liệu

183

Tập bài giảng SQL Server

Bước 3: Chọn thành phần backup trong mục Backup component - Tùy chọn Database (mặc định): Cho phép tạo bản sao là sao lưu tất cả những

gì sở dữ liệu đang có

- Tùy chọn Files and filegroups: Cho phép chọn bản sao tệp tin dữ liệu ta có thể

chọn file trong nhóm file (*.mdf, *.ndf): gồm những file chính và file mở rộng.

Hình 6.3. File sao lưu

Trên cây thư mục chọn các file cần sao lưu. Hộp kiểm tra Copy Only Backup

cho phép sao lưu bản sao lưu cơ sở dữ liệu mà không ghi lại quá trình sao chép để

phục vụ cho tiến trình phục hồi lại cơ sở dữ liệu từ bản sao này.

Bước 4: Thiết lập thời gian sao lưu trong mục Backup set will expire thiết lập

thời gian sao lưu

- Tùy chọn After mặc định sẽ cho ta bản sao dữ liệu ngay khi nhấp OK để chấp

nhận.

- Tùy chọn On để chỉ định thời gian sao lưu. Ta có thể thiết lập thời gian để hệ

thống tự động sao lưu vào thời gian đó.

Bước 5 : Chọn vị trí lưu trữ file trong mục Destination: - Chọn tùy chọn Disk để lưu trữ file lên đĩa. - Đường dẫn và lưu file back up mặc định đã được khai báo trong phần

Destination. Nếu muốn thay đổi lại đường dẫn có thể chọn Remove để loại bỏ đường

dẫn mặc định. Sau đó chọn Add để nhập vào tên file và vị trí lưu trữ khác.

184

Tập bài giảng SQL Server

Hình 6.4. Chọn đường dẫn lưu trữ file backup

- Nhấp chuột chọn để chọn vị trí lưu trữ

Hình 6.5. Chọn thư mục lưu file backup

+ Chọn thư mục lưu trữ trên cây thư mục. + Nhập tên file backup trong mục File name.

6.2. Phục hồi cơ sở dữ liệu

6.2.1. Khái niệm

Phục hồi dữ liệu là quá trình khôi phục lại cơ sở dữ liệu mà trước đó dữ liệu đã được sao lưu. Khi cơ sở dữ liệu đang vận hành gặp sự cố do các yếu tố khách quan hay chủ quan thì việc phục hồi dữ liệu đã sao lưu trước đó luôn được ưu tiên hàng đầu

185

Tập bài giảng SQL Server nhằm khắc phục lại cơ sở dữ liệu cho ứng dụng để người sử dụng tiếp tục làm việc. Trong một số trường hợp, muốn lấy lại cơ sở dữ liệu dựa vào bản sao lưu trước đó thì

ta cũng tiến hành phục hồi lại chúng. Ta có thể phục hồi dữ liệu từ các file bản sao lưu

dạng Full, bản sao lưu dạng Differential, bản sao theo dạng tệp tin, bản sao lưu dạng

copy.

6.2.2. Thực hiện phục hồi

Bước 1: Chọn ngăn Database/Chọn cơ sở dữ liệu/ Chọn chuột phải / Chọn

Task/Chọn Restore/Chọn Database.

Hình 6.6. Thao tác phục hồi dữ liệu

Bước 2: Chọn nguồn khôi phục trong mục Source of restore

- Bản sao lấy từ cơ sở dữ liệu chọn mục Database: Cơ sở dữ liệu qlts trước đó

đã được tạo thành hai bản sao là Full và Differential. Nếu muốn sao lưu toàn bộ dữ

liệu ở lần sao lưu gần nhất chọn cả hai file như hình trên. Còn nếu muốn lấy dữ liệu cũ

hơn chỉ cần chọn file sao lưu loại Full.

Hình 6.7. Chọn cơ sở dữ liệu nguồn cần khôi phục

- Bản sao lấy từ tệp tin chọn From device:

186

Tập bài giảng SQL Server

Hình 6.8. Khôi phục dữ liệu từ thiết bị lưu trữ

- Click chọn tên file sao lưu

Hình 6.9. Bổ sung file backup

- Chọn nút Add để chọn file trên cây thư mục.

Hình 6.10. Chọn file backup để khôi phục

187

Tập bài giảng SQL Server

- Chọn tệp tin bản sao/ Chọn OK. Khi đó, trở về màn hình 6.9. - Chọn OK. Trở về màn hình Restore. Đánh dấu chọn file back up trong cột

Restore.

Hình 6.11. Chọn file backup

Bước 3. Chọn OK. Nếu phục hồi thành công sẽ nhận được thông báo.

Hình 6.12. Thông báo khôi phục thành công

6.3. Xây dựng kế hoạch sao lƣu cơ sở dữ liệu Mỗi khi sự cố xảy ra, rủi ro để mất dữ liệu có thể liên quan đến các tập tin đã sao lưu. Trong một số trường hợp sự cố ngoài ý muốn ta có thể mất những tệp tin đã

sao lưu lẫn cơ sở dữ liệu đang chạy. Việc sao chép các tập tin đã sao lưu vào ổ đĩa

khác hay thiết bị chuyên dùng là cách tốt nhất để tránh rủi ro. Ngoài ra tạo tệp tin sao

lưu theo định kỳ cũng là cách mà bạn có thể tránh rủi ro. Để đảm bảo khi sự cố xảy ra,

bạn có bản sao mới nhất để phục hồi thì phải lập kế hoạch sao lưu, kế hoạch này sẽ

thực thi theo lộ trình đã định sẵn. Để thực hiện lập kế hoạch sao lưu cần thực hiện 2

công việc:

- Khai báo kế hoạch chi tiết ứng với lịch trình. - Khai báo nghiệp vụ sao lưu cho kế hoạch chi tiết.

6.3.1. Tạo kế hoạch chi tiết

Tạo kế hoạch chi tiết sao lưu là quá trình lập kế hoạch cho việc sao lưu dữ liệu. Một kế hoạch có thể gồm nhiều lịch biểu. Mỗi lịch biểu được coi như kế hoạch con (subplan). Mỗi một kế hoạch con (subplan) có thể thiết lập lịch trình về thời gian sao lưu. Ta có thể lập kế hoạch sao lưu theo từng ngày trong tuần, theo từng ngày hoặc theo từng tháng. Tùy theo tính chất của cơ sở dữ liệu mà lập lịch sao lưu có những cơ sở dữ liệu cần phải được sao lưu sau mỗi ngày làm việc, nhưng cũng có những cơ sở dữ liệu được chỉ định theo từng tuần hoặc theo định kỳ hàng tháng và quý. Công việc

188

Tập bài giảng SQL Server

sao lưu thường được thực hiện vào cuối phiên làm việc để tránh ảnh hưởng đến hiệu suất làm việc.

Kế hoạch sao lưu được quản lý bởi dịch vụ SQL Server Agent. Do đó để có thể

thực thi được kế hoạch này dịch vụ SQL Server Agent cần được thiết lập ở trạng thái

running.

Các bước tạo kế hoạch sao lưu: Bước 1: Trong Object Explore, Chọn mục Management/ Chọn Management

Plans/Chọn phải chuột/ Chọn New Mainternance Plan.

Hình 6.13. Chọn chức năng New Mainternance Plan

189

Tập bài giảng SQL Server Bước 2: Đặt tên cho kế hoạch tại mục Name/Chọn OK.

Hình 6.13. Đặt tên kế hoạch

Bước 3: Khai báo cấu hình kế hoạch

Hình 6.14. Khai báo cấu hình kế hoạch tạo bản sao - Chọn mục Subplan_1, xuất hiện cửa sổ khai báo từng kế hoạch chi tiết:

+ Nhập tên cho kế hoạch tại mục Name + Mô tả kế hoạch tại mục Description

Hình 6.15. Khai báo kế hoạch chi tiết

Bước 4: Lập lịch

- Tại mục Schedule chọn biểu tượng

190

Tập bài giảng SQL Server

Hình 6.16. Khai báo lịch trình thực hiện

- Thiết lập các thông số cho lịch

+ Mục Schedule type: Chọn loại lịch trình

 Start automatically when SQL Server Agent start: Thực hiện khi SQL

Server Agent khởi động.

 Start whenever CPUs becom idle: Bắt đầu khi CPU không làm gì.  Recurring : Lập lịch định kỳ.  On time: Vào thời gian nào

+ Mục Frequecy: Chọn tần xuất thực hiện

 Occurs: chọn tần xuất thực hiện theo ngày/tuần/tháng.  Tùy chọn Daily: Theo ngày

Hình 6.17. Chọn lịch trình sao lưu theo ngày

 Tùy chọn Weekly: Theo tuần

Hình 6.18. Chọn lịch trình sao lưu theo tuần

 Tùy chọn Month: Theo tháng

191

Tập bài giảng SQL Server

Hình 6.19. Chọn lịch trình sao lưu theo tháng

+ Mục Daily frequency: Chọn thời gian thực hiện

 Occurs one at: Thời điểm xuất hiện  Occurs: Tần suất xuất hiện  Starting at: Thời điểm bắt đầu  Starting at: Thời điểm kết thúc. + Mục Duration: Chọn thời điểm thực hiện.

 Start date: Ngày bắt đầu  End date: Ngày kết thúc  No end Date: Không có ngày kết thúc. - Chọn OK để trở về màn hình kế hoạch chi tiết.

Hình 6.20. Giao diện kế hoạch thứ nhất

- Chọn OK để trở về giao diện khai báo cấu hình kế hoạch.

Hình 6.21. Kết thúc khai báo chi tiết cho kế hoạch thứ nhất.

Để bổ sung thêm kế hoạch sao lưu ta thực hiện như sau:

192

Tập bài giảng SQL Server

- Chọn Add Subplan. - Khai báo như kế hoạch thứ nhất.

6.3.2. Tạo nghiệp vụ sao lưu chi tiết

Sau khi có kế hoạch sao lưu việc sao lưu cơ sở dữ liệu nào ứng với lịch biểu đã

lập ra, ta cần khai báo tên cơ sở dữ liệu và kiểu bản sao tương ứng. Đó là thao tác tạo nghiệp vụ sao lưu.

Các bước tạo nghiệp vụ sao lưu: Bước 1: Mở lịch biểu cần khai báo nghiệp vụ sao lưu.

Bước 2: Trên hộp thoại công cụ (Toolbox), chọn Back Up Database Tas và kéo

thả vào ngăn bên dưới của kế hoạch chi tiết/Kích chọn Back Up Database Task.

Hình 6.22. Thêm nghiệp vụ vào kế hoạch sao lưu

Bước 3: Chọn cơ sở dữ liệu sao lưu

- Chọn mục Database

- Chọn loại cơ sở dữ liệu

+ All databases: Tất cả các cơ sở dữ liệu

+ System databases: Cơ sở dữ liệu hệ thống

+ All user databases: Cơ sở dữ liệu người dùng + These databases: Các cơ sở dữ liệu tùy chọn.

- Chọn OK.

193

Tập bài giảng SQL Server

Hình 6.23. Danh sách cơ sở dữ liệu

Bước 4: Chọn thành phần sao lưu tại mục Backup Component

- Databases

- File and FileGroup

Bước 5: Chọn thư mục lưu file backup trong mục Folder/Chọn OK.

Hình 6.24.Cấu hình tạo bản sao

Bước 6: Đặt tên cho nghiệp vụ: Chọn phải chuột trên khung Backup

Database/Chọn Rename và đổi tên nghiệp vụ cho phù hợp.

Bước 7: Lưu kế hoạch: Chọn Yes.

Hình 6.25. Lưu kế hoạch chi tiết

Sau khi lưu, kế hoạch sao lưu xuất hiện trên cửa sổ Explorer object.

194

Tập bài giảng SQL Server

Hình 6.26. Kế hoạch chi tiết

Kế hoạch này sẽ tự động chạy theo lịch trình đã định. Tuy nhiên, ta có thể chạy

lịch trình này bất kỳ lúc nào bằng cách phải chuột vào kế hoạch và chọn Execute.

6.4. Sao chép dữ liệu

Sao lưu dữ liệu nhằm mục đích di chuyển cơ sở dữ liệu từ SQL Server này sang

SQL Server khác trên cùng mạng.

Các bước sao chép dữ liệu

Bước 1: Chọn cơ sở dữ liệu/Chọn chuột phải/Chọn Task/ Chọn Copy Database.

Hình 6.27. Thao tác sao chép cơ sở dữ liệu

Bước 2: Chọn nút Next.

195

Tập bài giảng SQL Server

Hình 6.28. Sao chép cơ sở dữ liệu

Bước 3: Chọn cơ sở dữ liệu nguồn

- Nhập tên máy chủ nơi chứa cơ sở dữ liệu cần sao chép tại mục Source server

- Chọn quyền đăng nhập dữ liệu: Đăng nhập Windows hay SQL Server.

Hình 6.29. Khai báo cơ sở dữ liệu nguồn

Bước 4: Khai báo cơ sở dữ liệu đích - Khai báo tên máy chủ chứa cơ sở dữ liệu sao chép tới . - Đặt quyền đăng nhập là Windows hay SQL Server.

196

Tập bài giảng SQL Server

Hình 6.30. Khai báo cơ sở dữ liệu đích

Bước 5: Chọn phương thức sao chép

SQL Server 2008 sử dụng hai phương pháp sao chép cơ sở dữ liệu từ SQL

Server này sang SQL Server khác:

- Phương pháp thứ nhất là loại bỏ (Detach). Sau đó thêm vào (Attach) SQL

Server khác

- Phương pháp thứ hai là sử dụng thư viện SQL Managemet Object (SMO).

+ Chọn mục Use the detach and attach methoed.

+ Chọn nút Next.

Hình 6.31. Phương pháp sao chép

197

Tập bài giảng SQL Server

Bước 6: Chọn cơ sở dữ liệu/Chọn nút Next.

Hình 6.32. Chọn cơ sở dữ liệu sao chép

Bước 7: Cấu hình cơ sở dữ liệu đích/Chọn Next.

Hình 6.33. Cấu hình cơ sở dữ liệu đích

Bước 8: Tại mục Package name nhập tên cho gói sao chép.

198

Tập bài giảng SQL Server

Hình 6.34. Cấu hình cho gói sao chép

Bước 9: Chọn chế độ thực thi/Chọn nút Next.

- Run immediately: Chạy ngay lập tức

- Schelude: Thực thi theo kế hoạch.

Hình 6.35. Chọn chế độ thực thi

199

Tập bài giảng SQL Server

Hình 6.36. Màn hình tóm tắt quá trình sao chép

Bước 10: Chọn Finish để kết thúc.

Trong trường hợp sao chép không thành công có thể nhận được thông báo

Hình 6.37. Thông báo sao chép không thành công

200

Tập bài giảng SQL Server

Để khắc phục, hãy khởi động dịch vụ này trong phần Services của hệ điều hành từ Control Panel trong mục Administrative hay từ SQL Server Configuration Manager:

Chọn dịch vụ SQL Server Agent/Chọn Start.

Hình 6.38. Khởi động dịch vụ Agent

201

Tập bài giảng SQL Server

Chƣơng 7 QUẢN LÝ BẢO MẬT VÀ NGƢỜI DÙNG

7.1. Các chế độ xác thực của SQL SERVER

Trước khi bắt đầu xây dựng cơ sở dữ liệu, việc xác định người sử dụng được

phép làm với cơ sở dữ liệu là hết sức cần thiết. Mỗi tài khoản tạo ra trong SQL Server

2008 đều có thể truy cập vào cơ sở dữ liệu nếu chúng được phép.

Hình 7.1. Mô hình chế độ bảo mật trong SQL Server

Như vậy để truy nhập vào cơ sở dữ liệu, người dùng cần có tài khoản để đăng

nhập vào SQL Server. Điều đó gọi là chế độ xác thực(Authentication). SQL Server

cung cấp hai chế độ xác thực là chế độ xác thực thông qua hệ điều hành và chế độ xác

thực bằng SQL Server.

Nếu người dùng đăng nhập thành công, để truy cập vào cơ sở dữ liệu thì họ

phải được phép của nhà quản trị. Quyền này gọi là Authorization (được phép).

7.1.1 Chế độ xác thực thông qua hệ điều hành

Khi người sử dụng là một user của windows thì có thể đăng nhập vào SQL Server mà không cần cung cấp User Name và Password. SQL Server sẽ kiểm tra tài khoản này đã được khai báo trong SQL Server hay chưa.

202

Tập bài giảng SQL Server

Hình 7.2. Đăng nhập bằng tài khoản hệ điều hành

Sau khi cài đặt thành công SQL Server, hai tài khoản có quyền cao nhất ứng với

hai đặc quyền Windows Authentication là Administrator và SQL Server là sa.

Bằng cách sử dụng một trong hai tài khoản Administrator hay sa, ta có thể tạo ra các tài khoản khác và cấp quyền truy cập cho chúng. Mọi tài khoản của SQL Server

được tạo ra đều nằm trong ngăn Security/Logins.

Hình 7.3. Tài khoản người sử dụng trong SQL Server

7.1.2. Chế độ xác thực bằng SQL Server

Muốn đăng nhập vào SQL Server người sử dụng cần có tài khoản được cấp từ

SQL Server gồm user name và password.

203

Tập bài giảng SQL Server

Hình 7.4. Đăng nhập bằng tài khoản SQL Server

7.2. Các nhóm quyền trên SQL Server

Để quản lý quyền của người sử dụng trên SQL Server, ta có thể gán các quyền

cho các user. Các nhóm quyền này do SQL Server định sẵn, người sử dụng không thể

tạo nhóm quyền mới cho SQL Server. Khi tạo mới một tài khoản trong SQL Server, ta

có thể chọn một hoặc nhiều quyền để gắn cho user.

Các nhóm quyền:

- Public: Mọi tài khoản SQL Server 2008 đều thuộc nhóm quyền public, khi cấp

quyền hay ngăn cấm tài khoản người sử dụng trên đối tượng trong SQL Server 2008

thì chúng được thừa kế từ quyền public trên đối tượng đó. Để truy cập được đối tượng

trong SQL Server 2008, chỉ cần gán nhóm quyền public cho đối tượng nếu đối tượng

đó cho phép mọi tài khoản của người sử dụng được truy cập.

- SysAdmin: Tài khoản người dùng thuộc nhóm quyền là sysadmin thì có quyền

thực hiện mọi thao tác trên SQL Server 2008.

- ServerAdmin: Tài khoản người sử dụng thuộc nhóm quyền là serveradmin có

quyền thay đổi cấu hình, tùy chọn và dừng đối tượng SQL Server 2008 đang chạy.

- SecurityAdmin: Tương tự như nhóm quyền trên, tài khoản có nhóm quyền securityadmin sẽ quản lý tài khoản của SQL Server. Ngoài ra nhóm quyền này còn có thể cấp quyền (Grant) cấm (deny) và loại bỏ quyền đã cấp (Revoke) trên đối tượng của

SQL Server 2008 hay đối tượng cơ sở dữ liệu.

- ProcessAdmin: Tài khoản người sử dụng thuộc nhóm quyền là processadmin

có quyền dùng hay kết thúc đối tượng SQL Server 2008 đang chạy.

- SetupAdmin: Tài khoản người sử dụng thuộc nhóm quyền là SetupAdmin có

quyền thêm hay loại bỏ đối tượng liên kết SQL Server 2008.

- BulkAdmin: Tài khoản người sử dụng thuộc nhóm quyền là Bulkadmin có

quyền chạy phát biểu Insert trong SQL Server 2008.

204

Tập bài giảng SQL Server

- DiskAdmin: Tài khoản người sử dụng thuộc nhóm quyền là Diskadmin có

quyền quản lý tập tin trên đĩa dùng cho ứng dụng SQL Server 2008.

- DBCreator: Tài khoản người sử dụng thuộc nhóm quyền là DBCreator có

quyền tạo mới, thay đổi, xóa hay phục hồi cơ sở dữ liệu bất kỳ trong SQL Server.

7.3.Quản lý tài khoản cho ngƣời sử dụng

7.3.1. Tạo tài khoản mới

1) Tạo tài khoản cho người sử dụng bằng MS a) Tài khoản đăng nhập theo chế độ xác thực của hệ điều hành

Trước khi tạo tài khoản đăng nhập theo chế độ xác thực của hệ điều hành thì tài

khoản khai báo phải tồn tại trong hệ điều hành.

Các bước tạo tài khoản trong hệ điều hành Windows:

Bước 1: Chọn Control Panel/Administrative Tools/Computer Management/

System Tool/ Local Users and Groups.

Hình 7.5. Màn hình tạo tài khoản trong windows

Bước 2: Chọn User/ Chọn chuột phải/Chọn New User

Hình 7.6. Tạo tài khoản mới trong Windows

205

Tập bài giảng SQL Server

Bước 3: Nhập thông số cho tài khoản - User name: Tên tài khoản

- Full name: Tên đầy đủ

- Description: Miêu tả tài khoản

- Password: Mật khẩu của tài khoản - Confirm password: Xác nhập lại mật khẩu của tài khoản - Chọn nút Create.

Hình 7.7. Nhập thông số cho tài khoản trong Windows

Kết quả sau khi đã tạo tài khoản thành công

Hình 7.8. Kết quả tạo tài khoản trong Windows thành công

Các bước tạo tài khoản trong SQL Server: Bước 1: Chọn Security/Chọn Login/Chọn chuột phải/Chọn New Login

206

Tập bài giảng SQL Server

Hình 7.9. Tạo login mới

Bước 2: Khai báo tài khoản

- Nhập tên tài khoản tại mục Login name

- Chọn chế độ chứng thực là Windows authentication

- Chọn OK.

Hình 7.10. Khai báo tên tài khoản trong Window Sau khi tạo xong tài khoản thì tài khoản sẽ xuất hiện trong danh mục Login

Hình 7.11. Danh sách login trong hệ thống

Trong trường hợp không nhớ tên tài khoản, thì ta có thể thực hiện tìm kiếm tài

khoản như sau:

Bước 1: Tại hình 7.10, chọn nút Search

207

Tập bài giảng SQL Server

Hình 7.12. Chọn tài khoản của hệ điều hành

Bước 3: Chọn nút Advanced.

Hình 7.13. Tìm kiếm tài khoản

Bước 4: Chọn nút Find Now. Khi đó, danh sách tài khoản của hệ điều hành

được liệt kê phía dưới.

Hình 7.14. Danh sách tài khoản của hệ điều hành

Bước 5: Chọn tài khoản/Chọn OK.

208

Tập bài giảng SQL Server

Hình 7.15. Màn hình nhập tên tài khoản

b) Tạo tài khoản đăng nhập theo chế độ xác thực của SQL Server

Bước 1: Chọn Security/Chọn Login/Chọn chuột phải/Chọn New Login

Bước 2: Khai báo tài khoản

- Nhập tên tài khoản tại mục Login name

- Chọn chế độ chứng thực là SQL Server Authentication

Hình 7.16. Khai báo tên tài khoản trong SQL Server

2) Tạo tài khoản bằng phát biểu SQL a) Tạo tài khoản đăng nhập bằng tài khoản Windows Cú pháp CREATE LOGIN FROM WINDOWS

Trong đó: Name of Windows User: Tên người dùng của windows b) Tạo tài khoản đăng nhập bằng tài khoản SQL Server

Cú pháp

209

Tập bài giảng SQL Server

CREATE LOGIN WITH PASSWORD = '' Trong đó:

- Login name: Tên đăng nhập

- Password: Mật khẩu đăng nhập

7.3.2. Khai báo nhóm quyền cho tài khoản

Khi một tài khoản mới được tạo ra SQL Server mặc định sẽ gán cho tài khoản

đó quyền Public. Tuy nhiên, ta có thể bổ sung thêm các quyền cho các tài khoản.

Các bước gán vai trò máy chủ cho người dùng:

Bước 1: Trong mục Login/Chọn tên tài khoản/Chọn chuột phải/Chọn properties

Hình 7.17. Thay đổi thông số cho tài khoản Bước 2: Chọn trang Server Roles/chọn các quyền trong danh sách quyền.

Hình 7.18. Chọn vai trò máy chủ

210

Tập bài giảng SQL Server

Các loại quyền:

- bulkadmin: Cho phép chạy các câu lệnh BULK INSERT.

- dbcreator: Cho phép quản lý cơ sở dữ liệu.

- diskadmin: Cho phép quản lý các tập tin trên đĩa.

- processadmin: Cho phép kết thúc các tiến trình đang chạy trong một thể hiện

của SQL Server.

- public: Cho phép gán quyền truy cập công cộng trên bất kỳ đối tượng nào khi

muốn các đối tượng có sẵn cho tất cả người dùng.

- securityadmin: cho phép người quản trị bảo mật để gán quyền truy cập hầu hết

các máy chủ.

- setupadmin: Cho phép thêm và loại bỏ các máy chủ liên kết.

- serveradmin: Cho phép thay đổi các tùy chọn cấu hình máy chủ và tắt máy

chủ.

- Sysadmin: Cho phép thực hiện bất kỳ hoạt động nào trên máy chủ.

7.3.3.Tài khoản của người dùng trên cơ sở dữ liệu

Login user tạo ra trong SQL Server dùng để đăng nhập vào Server. Do đó

chúng không có quyền thao tác trên cơ sở dữ liệu trừ login là Administrator của hệ

điều hành hay sa cùng với tài khoản thuộc nhóm admin. Do đó, ta cần phải khai báo

login user trong cơ sở dữ liệu để người sử dụng sau khi đăng nhập vào SQL Server có

thể truy cập vào cơ sở dữ liệu.

Khi login user được tạo ra, cần phải chỉ định tên cơ sở dữ liệu để người dùng có

thể thao tác trên cơ sở dữ liệu đó. Mỗi login user có thể khai báo trong nhiều cơ sở dữ

liệu gọi là tài khoản truy cập cơ sở dữ liệu (database user). Một cơ sở dữ liệu có thể có

nhiều database user. Tài khoản truy cập cơ sở dữ liệu có thể có trước khi cơ sở dữ liệu được tạo hoặc sau khi cơ sở dữ liệu được tạo.

1) Tài khoản có sau cơ sở dữ liệu

Bước 1: Trong mục Login/Chọn tên tài khoản/Chọn chuột phải/Chọn properties Bước 2: Trang User Mapping Bước 3: Chọn cơ sở dữ liệu gán cho tài khoản

211

Tập bài giảng SQL Server

Hình 7.19. Chọn cơ sở dữ liệu cho tài khoản

Bước 4: Chỉ định vai trò của database user trong cơ sở dữ liệu bằng đánh dấu

chọn vào các tùy chọn trong phần Database Role membership:

- db_owner: Có thể thực hiện hầu hết mọi việc mà người chủ sở hữu thực sự

của cơ sở dữ liệu có thể làm được như thêm thành viên, hủy thành viên, chạy các lệnh, quản lý quyền truy nhập trên các đối tượng cơ sở dữ liệu.

- db_accessadmin: Người dùng có quyền quản lý các Windows Group và tài

khoản SQL Server đăng nhập để điều hành truy xuất dữ liệu.

- db_datareader: Người dùng có vai trò khai thác được toàn bộ dữ liệu.

- db_datawriter: Người dùng có vai trò chỉnh sửa, cập nhật dữ liệu trong bảng.

- db_ddladmin: Người dùng vai trò điều hành các lệnh xác định dữ liệu có thể

thực hiện các công việc như gắn quyền tham chiếu lên bất cứ bảng nào, biên dịch lại

các trình cài đặt sẵn bằng sử dụng thủ tục lưu trữ hệ thống , đổi tên đối tượng, thay đổi thông số của một số bảng, thay đổi người sở hữu đối tượng ….

- db_securityadmin: Người dùng có vai trò bảo mật hệ thống kiểm soát bảo mật

trong một cơ sở dữ liệu.

- db_backupoperator: Người dùng có vai trò điều hành việc sao lưu dữ liệu. - db_denydatareader: Người dùng có vai trò vô hiệu hóa khai thác thông tin

không thể xem dữ liệu trong bảng hay view.

- db_denydatawriter: Người dùng có vai trò vô hiệu hóa thông tin không thể

chạy các lệnh update, insert hoặc delete trên bảng dữ liệu hay view

2) Tài khoản có trước cơ sở dữ liệu

212

Tập bài giảng SQL Server

Khi tạo mới tài khoản trong SQL Server 2008, nếu cơ sở dữ liệu chưa tồn tại thì có khai báo cho phép chúng truy nhập vào cơ sở dữ liệu bằng cách cập nhật sau khi cơ

sở dữ liệu được tạo ra như cách làm trên.

Các bước khai báo tài khoản truy nhập cơ sở dữ liệu:

Bước 1: Chọn vào tên cơ sở dữ liệu/Chọn Security/Chọn Users/Chọn New

User.

Hình 7.20. Tạo user mới cho cơ sở dữ liệu

Hình 7.21. Khai báo tài khoản cơ sở dữ liệu

213

Tập bài giảng SQL Server

Bước 2: Trong mục Login name nhấp chọn nút để tìm tài khoản trong danh

sách tài khoản của SQL Server.

Hình 7.22. Tìm tài khoản người dùng

Bước 3: Chọn nút Browse/Chọn tài khoản/Chọn OK.

Hình 7.23. Chọn tên người dùng

Bước 4: Trong mục Default Schema, nhấp chọn nút để tìm giản đồ cho tài

khoản.

Hình 7.24. Tìm loại giản đồ Bước 5: Chọn nút Browse/Chọn giản đồ/Chọn OK.

214

Tập bài giảng SQL Server

Hình 7.25. Chọn loại giản đồ

Bước 6: Đánh dấu chọn vào các tùy chọn trong phần Database Role

membership để gắn quyền thao tác cơ sở dữ liệu cho người dùng/ Chọn OK.

Hình 7.26. Gán quyền thao tác dữ liệu

Bước 7: Chọn trang Status/chọn Grant và Enabled/Chọn OK.

215

Tập bài giảng SQL Server

Hình 7.27. Chọn chế độ Login

216

Tập bài giảng SQL Server

Chƣơng 8 SQL SERVER VÀ LẬP TRÌNH ỨNG DỤNG

8.1. Các mô hình kết nối ứng dụng đến SQL Server

8.1.1. Mô hình ADO

ADO là phương thức truy xuất dữ liệu cũ của Microsoft, và nó đã trở thành

chuẩn cho các môi trường Office, Web, và Visual Basic trước .NET. Sau đây là các sản phẩm phát triển của ADO:

- Microsoft Office 200x

- Visual Studio 6.0 (bao gồm tất cả các ngôn ngữ trong đó)

- SQL Server 7.0, 2000

Data Access Objects (DAO), là chuẩn trước ADO, được sử dụng trong Office và Visual Basic, nhưng nó không được thiết kế để sử dụng trong các môi trường Web

như Visual InterDev và các dữ liệu servers khác. Do đó, ADO cho đến bây giờ đang là

chuẩn để phát triển các ứng dụng.

Các mô hình đối tượng ADO (ADO Object Models)

Đây là các mô hình đối tượng, mang ý nghĩa số nhiều. Không như DAO chỉ bao gồm một mô hình đối tượng (one object model), ADO được phân chia thành các mô

hình đối tượng (Object models). Các mô hình đối tượng của ADO làm việc với nhau

đưa ra các objects và các collections cần thiết để ta làm việc với dữ liệu. Trong ADO

có cặp mô hình đối tượng:

- ActiveX Data Objects 2.7 (ADODB) cho phép ta tạo và làm việc với

recordsets cũng như thực hiện quản lý lỗi.

- ADO Extensions 2.7 for DDL and Security (ADOX) là ngôn ngữ định nghĩa

dữ liệu, cho phép ta làm việc và sửa đổi lược đồ cơ sở dữ liệu (Database schema) và

bảo mật các đối tượng. Tuy nhiên, các đối tượng này sẽ được sử dụng kết hợp với

nhau. Chẳng hạn, khi muốn sửa đổi cấu trúc một bảng thì ta cần thư viện ADOX, nhưng để nó hoạt động thì ta cần ADODB. Các ứng dụng thường làm việc với các bản

ghi dữ liệu.

Mô hình đối tượng ActiveX Data Objects - ADO bao gồm:

- Đối tượng Connection: Là nơi mà tất cả các thao tác làm việc của ta với ADO được bắt đầu. Tất cả các Objects và Collections đều được đề cập sau đối tượng

Connection.

- Đối tượng Errors collection/Error: Giống như DAO Errors Collection và Error

Object, nó cho phép phát triển để quản lý lỗi.

217

Tập bài giảng SQL Server

- Đối tượng Command: Cho phép chạy truy vấn trên một cơ sở dữ liệu và trả lại các bản ghi trên đối tượng Recordset, thao tác với cấu trúc cơ sở dữ liệu, và thực hiện

một thao tác dữ liệu. Một tập hợp các tham số sẽ được sử dụng với đối tượng

Command.

- Đối tượng Recordset: Dùng để mở các đối tượng Recordset để chỉ đọc hoặc

tạo bảng động. Mỗi đối tượng Recordset có một tập các trường (Field).

- Đối tượng Stream: Cho phép đọc cây đặc biệt - cấu trúc phân cấp (special

tree-tructured hierarchies), như e-mail messages hoặc các file hệ thống.

Hình 8.1. Mô hình ADO

8.1.2. Mô hình ADO.NET

ADO.NET được thiết kế để cung cấp kiến trúc rời rạc (Disconnected

Architecture). Có nghĩa là các ứng dụng kết nối đến cơ sở dữ liệu, truy cập dữ liệu và

lưu trữ trong bộ nhớ. Sau đó hủy bỏ kết nối với cơ sở dữ liệu và sử dụng bộ nhớ sao chép của dữ liệu đó. Nếu như cơ sở dữ liệu cần phải được cập nhật với các thay đổi

trên bộ nhớ sao chép, một kết nối mới được hình thành và cơ sở dữ liệu được cập nhật. Bộ nhớ chính lưu trữ dữ liệu là DataSet, nơi mà chứa các bộ nhớ lưu trữ dữ liệu khác,

như là: Các đối tượng DataTable; ta có thể lọc và sắp xếp dữ liệu trên DataSet bằng việc sử dụng các đối tượng DataView.

Việc sử dụng kiến trúc Disconnected Architecture cung cấp rất nhiều lợi ích,

trong đó, quan trọng nhất là cho phép ứng dụng trở lên scale up. Nghĩa là cơ sở dữ liệu sẽ thực thi tốt như hỗ trợ hàng trăm người dùng. Điều đó có thể bởi vì ứng dụng kết

nối đến cơ sở dữ liệu chỉ đủ để truy cập hoặc cập nhật dữ liệu, bằng cách đó giải phóng các kết nối và cơ sở dữ liệu sẵn có cho các thể hiện khác của ứng dụng hoặc các

ứng dụng khác sử dụng cùng cơ sở dữ liệu.

218

Tập bài giảng SQL Server

Hình 8.2. Mô hình ADO.NET

1) Các đối tượng trong ADO.NET

Các đối tượng được dùng để thao tác dữ liệu

- DataSet: Đối tượng này được sử dụng cùng với các điều khiển dữ liệu khác,

lưu trữ các kết quả được trả về bởi các đối tượng Commands và Data Adapters. Không

như Recordset của ADO và DAO, DatSet thực sự mang lại một View phân cấp của dữ

liệu. Bằng việc sử dụng các thuộc tính và các collections trong đối tượng DataSet, ta

có thể nhận được toàn bộ các quan hệ (Relations), các Tables riêng biệt, Rows, và

Columns.

- DataTable: Cho phép thao tác dữ liệu trong một bảng riêng biệt. Data Table

tương tự như đối tượng recordset trong ADO.

- DataView: Dùng để lọc và sắp xếp dữ liệu, duy trì các Views khác nhau của

dữ liệu. Mỗi Data Table có một View mặc định, nó là nơi khởi động Data View mà có thể được sửa đổi và lưu trữ trong DataView khác.

- DataRow: Cho phép thao tác các dòng của dữ liệu trong Data Tables. Nó có thể được xét như một nơi lưu trữ của dữ liệu mà ta có thể thực hiện các thao tác thêm, sửa, xóa các bản ghi. Ta có thể quay trở lại Recordset, nơi mà ta sẽ chạy các câu lệnh

SQL để cập nhật dữ liệu về Server.

- DataColumn: Dùng để nhận các thông tin tại các cột bằng việc sử dụng đối tượng DataColumn. Ta có thể lấy thông tin lược đồ như là dữ liệu bằng việc sử dụng

đối tượng này. Ví dụ nếu ta muốn tạo một List box của tên các trường, ta có thể lập

thông qua tập DataColumn của các dòng dữ liệu và tìm tất cả các tên trường. - PrimaryKey: Cho phép ta chỉ định khóa chính cho bảng dữ liệu.

2) Các lớp trong ADO.NET

219

Tập bài giảng SQL Server

.NET cũng cung cấp các lớp, được gọi Data providers, sử dụng tên miền (namespaces) để làm việc với các đối tượng ADO.NET và cung cấp các truy xuất

với dữ liệu. Lõi của các lớp ADO.NET tồn tại trong Namespace System.Data.

Namespace này chứa một vài Namespaces con. Phần quan trọng nhất của chúng là các

tên miền System.Data.SqlClient và System.Data.OleDb. Chúng cung cấp các classes sử dụng cho việc truy cập SQL Server Databases và OLE (Object Linking and Embedding) DB- compliant databases (phục hồi dữ liệu). Các lớp của OleDb và SqlClient được mô tả trong hình dưới đây:

Hình 8.3. Các lớp OleDb và SqlClient

Các đối tượng thường được sử dụng để thao tác với dữ liệu.

- Command: Tương tự như đối tượng ADO Command, cho phép ta thực hiện

các Stored Procedures trong mã nguồn. Khác với phiên bản ADO, ta có thể tạo đối

tượng DataReader bằng việc sử dụng phương thức ExecuteReader.

- Connection: Dùng để mở kết nối tới Server và Cơ sở dữ liệu mà ta muốn làm

việc. Khác với đối tượng ADO Connection, cách thức kết nối phụ thuộc vào đối tượng mà ta muốn làm việc, như là đối tượng DataReader hay DataSet.

- DataAdapter: Cho phép tạo các câu lệnh SQL và điền dữ liệu vào Datasets.

Nó cũng cho phép tạo các Queries cần thiết, như là Insert, Update, và Delete.

- DataReader: Cho phép tạo một lớp dạng Read-only, Forward-only của dữ liệu

mà cho phép chúng đặt trên các điều khiển, như ListBox và ComboBox.

- Parameter: Cho phép chỉ định các tham số mà các đối tượng DataAdapter có

thể chỉ định và sử dụng.

Ngoài ra, hai tên miền con khác cũng tồn tại trong tên miền System.Data. Đó là:

System.Data.OracleClient và System.Data.Odbc.

220

Tập bài giảng SQL Server

Trong đó, Namespace System.Data.OracleClient được sử dụng dành cho các CSDL Oracle. Các lớp SqlClient cung cấp các kết quả tốt nhất khi làm việc với các

SQL Server Databases; OracleClient cung cấp thực thi tối ưu khi truy cập vào Oracle

Databases. Namespace System.Data.Odbc cung cấp truy cập tới ODBC (Open

Database Connectivity) nguồn cơ sở dữ liệu cũ mà không được hỗ trợ bởi công nghệ OleDb. Như vậy, các tên miền System.Data.SqlClient, System.Data.OleDb, System.Data.OracleClient, và System.Data.Odbc được biết như là Data Providers trong ADO.NET.

3) Các lớp SqlClient trong mô hình ADO.NET

Danh sách sau chứa các lớp ADO.NET mà chúng sẽ được sử dụng trong quá

trình xây dựng ứng dụng sử dụng SQL Server Databases:

- SqlConnection - SqlCommand

- SqlDataAdapter

- SqlParameter

- SqlDataReader

Đây là các SqlClient cụ thể, trừ Namespace OleDb có rất nhiều close tương

đương. Mỗi khi ta muốn sử dụng lớp classes này, ta phải thêm một tham chiếu tới tên

miền System.Data. Để đơn giản, ta có thể sử dụng từ khóa Imports, và lúc đó ta không

cần phải điền đầy đủ các thành phần tên miền của SqlClient trong code, như đoạn mã

sau: Imports System.Data.SqlClient. Nếu ta muốn sử dụng lõi của các lớp ADO.NET,

như là DataSet và DataView không cần gõ đầy đủ tên miền, ta cần phải nhập tên miền

System.Data, như đoạn code tiếp theo: Imports System.Data. Ta nên quen thuộc với

việc nhập các tên miền khác nhau trong các dự án

Các lớp chính tồn tại trong Namespace System.Data.SqlClient:

a) Lớp SqlConnection:

Cung cấp một kết nối tới SQL Server Database. Khi xây dựng một đối tượng SqlConnection, ta có thể chọn để chỉ định một chuỗi kết nối (Connection Strings) như một tham số. Chuỗi kết nối chứa tất cả các thông tin cần thiết để mở một kết nối tới cơ

sở dữ liệu.

Nếu ta không chỉ định chuỗi kết nối trong khi xây dựng, ta có thể thiết lập nó

bằng việc sử dụng thuộc tính SqlConnection.ConnectionString.

- Cú pháp:

Imports System.Data.SqlClient Dim as String=

“Server=;

221

Tập bài giảng SQL Server

Initial Catalog=; Integrated Security=;

UserName=;Password=

Dim as New

SqlConnection(String_Connection_Name) Trong đó: - Object_Connection_Name: Tên đối tượng kết nối - String_Connection_Name: Chuỗi kết nối

- Các tham số của chuỗi kết nối (Connection String Parameters): Phương thức

để chuỗi kết nối được xây dựng sẽ phụ thộc vào Data Provider mà ta đang sử dụng.

Khi truy xuất SQL Server, ta thường cung cấp Server và Database.

+ Server: Tên của SQL Server mà ta muốn truy xuất. Nó thường là tên của máy tính đang chạy SQL Server. Ta có thể sử dụng (local) hoặc localhost nếu SQL Server

trên cùng một máy đang chạy ứng dụng. Nếu sử dụng các thể hiện tên của SQL Server,

thì tham số nên chứa tên của máy tính theo sau là đấu gạch chéo ngược và tiếp đó là

thể hiện tên của SQL Server.

+ Initial Catalog: Tên cơ sở dữ liệu muốn kết nối

+ Integrated Security: True (SSPI)/False chỉ định kết nối theo cơ chế bảo mật

của Windows Login (True) hay cơ chế bảo mật của SQL Server (False).

+ User ID: Tên người dùng sử dụng để kết nối tới cơ sở dữ liệu. Tài khoản với

user ID này phải tồn tại trong SQL Server và được phép truy cập đến cơ sở dữ liệu chỉ

định. Có nghĩa là khi đó Integrated Security=False.

+ Password: Là mật khẩu của người dùng đã chỉ định.

Ví dụ 1: Kết nối đến cơ sở dữ liệu “QLTS” được đặt tại máy có tên Server là

“Admin-0812qix” bằng chế độ bảo mật của Window.

Imports System.Data.SqlClient

Dim strConnection as String= “Server= Admin-0812qix; Initial Catalog=QLTS;

Integrated Security=True”

Dim Conn as New SqlConnection(strConnection) Ví dụ 2: Kết nối đến cơ sở dữ liệu QLTS được đặt tại máy có tên Server là

“Admin-0812qix” bằng chế độ bảo mật của SQL Server với tên người dùng là

“LinhGiang” và mật khẩu là “12345”. Imports System.Data.SqlClient

Dim strConnection as String=

222

Tập bài giảng SQL Server

“Server= Admin-0812qix; Initial Catalog=QLTS;

UserName=LinhGiang;Password=12345”

Dim Conn as New SqlConnection(strConnection)

- Mở và đóng kết nối: Sau khi khởi tạo đối tượng kết nối với một chuỗi kết nối,

ta có thể gọi các phương thức của đối tượng SqlConnection như là Open và Close.

Cú pháp: .Open()

.Close()

Ví dụ: Mở, đóng kết nối vừa tạo ở trên

cnn.Open()

cnn.Close()

b) Lớp SqlCommand

Lớp SqlCommand đại diện cho các câu lệnh SQL để thực hiện truy vấn dữ liệu

lưu trữ. Các câu lệnh là truy vấn Select, Insert, Update, hoặc Delete. Có thể là các

chuỗi SQL hoặc gọi một Stored Procedure. Và truy vấn được thực hiện có thể chứa các

tham số hoặc không chứa các tham số. Kiến trúc của lớp SqlCommand có một vài biến

số, nhưng phương thức đơn giản nhất để khởi tạo một đối tượng SqlCommand với

không tham số (Parameters). Tiếp theo, sau khi đối tượng đã được khởi tạo, ta có thể

thiết lập các thuộc tính ta cần để thực hiện các thao tác.

Hình 8.4. Mối liên hệ giữa lớp Command và các lớp khác

Cú pháp:

Dim As New SqlCommand() Ví dụ: Tạo một đối tượng Command có tên là cmd Dim cmd As New SqlCommand() - Các thuộc tính của Command + Thuộc tính Connection: Dùng để kết nối đến cơ sở dữ liệu. Để câu lệnh được

thực hiện thành công, thì kết nối phải được mở ở thời điểm thực hiện.

223

Tập bài giảng SQL Server

+ Thuộc tính CommandText: Dùng để chỉ định chuỗi SQL hoặc Stored Procedure sẽ được thực hiện. Hầu hết các cơ sở dữ liệu quy định đặt các giá trị của

chuỗi trong cặp dấu “Các giá trị của chuỗi “.

+ Thuộc tính CommandType: Loại nội dung trong CommandText với các giá

trị

Text: (mặc định) Một câu lệnh SQL Storedprocedure: Tên một thủ tục nội TableDirect: Khi CommandText là tên bảng

+ Thuộc tính Paramater: Xác định các tham số cần thiết cho câu lệnh SQL hoặc

Stored Procedure. Ta có thể truy cập vào tập các tham số của đối tượng SqlCommand

bằng việc chỉ định thuộc tính Parameters. Sau khi truy cập vào tập tham số, ta có thể

sử dụng các thuộc tính và các phương thức của nó để tạo một hoặc nhiều hơn các tham số trong tập các tham số. Mục đích của việc sử dụng tham số là khi một vài giá trị

trong câu lệnh chỉ biết khi thực hiện câu lệnh hoăc cần thực hiện câu lệnh nhiều lần

với các giá trị khác nhau.

Các bước thực hiện:  Tham số hóa câu lệnh: ? hoặc @[tên tham số].  Tạo các parameters tương ứng cho command.  Đặt giá trị cho các parameter mỗi khi dùng command thực hiện câu lệnh. - Các phương thức của Command

+ Phương thức ExecuteNonQuery: Để thực thi các câu lệnh SQL: Insert,

Update, Delete, Stored Procedure,…

+ ExcuteReader: Phương thức này nên sử dụng khi thực thi phát biểu Select,

mẫu tin trả về trong SqlDatareader. Chú ý, lớp DataReader là chỉ đọc, dữ liệu theo một chiều ngang theo một chiều.

+ Phương thức ExcuteScalar: Thực hiện lệnh Command và chỉ trả về cột đầu

tiên của dòng đầu tiên. Thường thực hiện theo các hàm thống kê.

Ví dụ 1: Thực hiện việc thêm một ngành học vào bảng Ngành với mã ngành là

“NH012”, tên ngành là “Khoa học máy tính”, chỉ tiêu tuyển sinh là 120.

Cách 1:

Imports System.Data.SqlClient Dim strConnection as String=

“Server= Admin-0812qix;

Initial Catalog=QLTS; Integrated Security=True”

Dim Conn as New SqlConnection(strConnection)

224

Tập bài giảng SQL Server

Dim Comm As New SqlCommand() Comm.Connection = Conn

Comm.CommandText = “INSERT INTO Nganh(Man,Tenn, chitieu)” +

“VALUES(„NH012‟ „Khoa học máy tính‟,120)”

Comm.CommandType = Text Conn.Open() Comm.ExecuteNonQuery() Conn.Close()

Cách 2:

Imports System.Data.SqlClient

Dim strConnection as String=

“Server= Admin-0812qix; Initial Catalog=QLTS;

Integrated Security=True”

Dim Conn as New SqlConnection(strConnection)

Dim Comm As New SqlCommand()

Comm.Connection = Conn

Comm.CommandText = “INSERT INTO Nganh(Man,Tenn, chitieu)” +

“VALUES(@man, @tenn, @ct)”

Comm.CommandType = Text

Comm.Parameters.Add(“@man”)=“NH012”

Comm.Parameters.Add(“@tenn”)=“Khoa học máy tính”

Comm.Parameters.Add(“@ct”)=120

Conn.Open() Comm.ExecuteNonQuery()

Conn.Close()

Ví dụ 2: Đưa ra số lượng các thí sinh đã đăng kí dự thi Imports System.Data.SqlClient Dim strConnection as String=

“Server= Admin-0812qix;

Initial Catalog=QLTS; Integrated Security=True”

Dim Conn as New SqlConnection(strConnection)

Dim Comm As New SqlCommand() Comm.Connection = Conn

Comm.CommandText = “Select Count(*) From Thisinh”

225

Tập bài giảng SQL Server

Dim Comm As New SqlCommand(strSQL, Conn) Conn.Open()

Dim Soluong As Integer=Comm.ExecuteScalar()

MsgBox(“Số lượng khách hàng” & Cstr(Soluong))

Conn.Close() c) Lớp SqlDataAdapter: Data Adapters hoạt động như một cầu nối giữa Data Source và các đối tượng lưu dữ liệu trong bộ nhớ, như là DataSet. Để truy xuất dữ liệu nguồn, chúng sử dụng

các đối tượng Command. Các đối tượng Command này liên quan đến các kết nối. Vì

vậy, Data Adapter này dựa vào các đối tượng Command và Connection để truy xuất và

điều khiển dữ liệu nguồn.

Hình 8.5. Lớp SqlDataAdapter

Cú pháp: Dim As New SqlDataAdapter()

Ví dụ: Tạo một đối tượng Data Adapter có tên là da

Dim da As New SqlDataAdapter()

- Các thuộc tính của SqlDataAdapter

+ Thuộc tính UpdateCommand: Dùng để cập nhật dữ liệu vào DataSet hoặc

DataTable.

+ Thuộc tính DeleteCommand: Dùng để xóa bản ghi vào DataSet hoặc

DataTable.

+ Thuộc tính InsertCommand: Dùng để thêm mới bản ghi vào DataSet hoặc

DataTable.

+ Thuộc tính SelectCommand: Dùng để đưa dữ liệu vào từ SQL Server vào DataSet hoặc DataTable. Khi ta muốn đọc dữ liệu từ kho dữ liệu, đầu tiên ta phải thiết lập thuộc tính SelectCommand của lớp SqlDataAdapter. Thuộc tính này là đối tượng

sqlCommand và nó được dùng để chỉ định dữ liệu được select và select dữ liệu như thế nào. Vì vậy, thuộc tính SelectCommand cũng có các thuộc tính của nó. Ta cần thiết lập chúng như là thiết lập các thuộc tính trên các câu lệnh thông thường. Hai thuộc tính

thông dụng đó là:

226

Tập bài giảng SQL Server

 Connection: Thiết lập đối tượng SqlConnection để truy xuất vào Data Store.  CommandText: Thiết lập các câu lệnh SQL hoặc tên Stored Procedure được sử

dụng để tìm kiếm dữ liệu.

Ví dụ 1: Thiết lập SelectCommand với một chuỗi SQL để đưa ra thông tin gồm số báo

danh, họ tên, ngày sinh của các thí sinh có quê quán là „Nam Định‟

Imports System.Data.SqlClient Dim strConnection as String= “Server= Admin-0812qix;

Initial Catalog=QLTS;

Integrated Security=True”

Dim Conn as New SqlConnection(strConnection)

Dim da As New SqlDataAdapter() da.SelectCommand = New SqlCommand()

da.SelectCommand.Connection = cnn

da.SelectCommand.CommandText =

“SELECT sbd, hoten, ngaysinh FROM Thisinh Where quequan=‟Nam Định‟“

Ví dụ 2: Thiết lập SelectCommand với một Stored Procedure có tên là sp_SelectTS.

Imports System.Data.SqlClient

Dim strConnection as String=

“Server= Admin-0812qix;

Initial Catalog=QLTS;

Integrated Security=True”

Dim Conn as New SqlConnection(strConnection)

Dim da As New SqlDataAdapter() da.SelectCommand.Connection = Conn

da.SelectCommand.CommandText = “sp_SelectTS”

da.SelectCommand.CommandType= CommandType.StoredProcedure - Các phương thức của SqlDataAdapter

Phương thức Fill: Sử dụng SelectCommand để lấy dữ liệu từ dữ liệu nguồn đưa

vào DataSet.

Cú pháp:

SqlDataAdapter.Fill(DataSet,String)

Trong đó: + DataSet: Xác định một đối tượng DataSet hợp lệ mà dữ liệu được lưu trữ ở

trong đó.

227

Tập bài giảng SQL Server

+ String: Tên của bảng có trong DataSet. Chú ý rằng, một DataSet có thể chứa nhiều bảng. Ta có thể sử dụng bất cứ tên

nào ta muốn, nhưng thường tốt nhất là sử dụng tên của các bảng nơi mà dữ liệu trong

cơ sở dữ liệu đến.

Ví dụ: Imports System.Data.SqlClient Dim strConnection as String= “Server= Admin-0812qix;

Initial Catalog=QLTS;

Integrated Security=True”

Dim Conn as New SqlConnection(strConnection)

Dim da As New SqlDataAdapter() da.SelectCommand.Connection = Conn

da.SelectCommand.CommandText = “sp_SelectTS”

da.SelectCommand.CommandType=

CommandType.StoredProcedure

Dim Ds as DataSet = New DataSet()

Da.Fill(Ds,“Thisinh”)

Phương thức Fill sử dụng thuộc tính SelectCommand.Connection để kết nối tới

cơ sở dữ liệu. Nếu kết nối đã được mở, Data Adapter sẽ sử dụng nó để thực hiện

SelectCommand. Và nếu như Connection đã đóng thì Data Adapter sẽ mở nó, thực

hiện SelectCommand, và sau đó đóng trở trở lại. Bây giờ ta đã có dữ liệu trong bộ nhớ,

và có thể bắt đầu thao tác nó không phụ thuộc vào Data Source. Tuy nhiên, lớp

DataSet không có Sql tại vị trí bắt đầu tên lớp của nó. Bởi vì DataSet không nằm namespace System.Data.SqlClient, nó nằm trong lớp cha Namespace trong

System.Data. Các lớp trong tên miền này có liên quan căn bản với thao các dữ liệu

trong bộ nhớ.

d) Lớp DataSet: Lớp DataSet được dùng để lưu trữ dữ liệu được lấy từ một kho dữ liệu và lưu

trữ dữ liệu trong bộ nhớ trên máy khách. Đối tượng DataSet chứa một tập các bảng,

các mối liên hệ và các ràng buộc thích hợp với dữ liệu đọc từ kho dữ liệu. Nó hoạt động như một bộ máy cơ sở dữ liệu gọn nhẹ, cho phép ta lưu trữ dữ liệu, sửa đổi dữ

liệu và chạy các truy vấn dựa vào việc sử dụng đối tượng DataView.

Dữ liệu trong DataSet không được kết nối từ kho dữ liệu, và ta có thể làm việc với dữ liệu độc lập với kho dữ liệu. Ta có thể thao tác dữ liệu trong đối tượng DataSet

bằng việc thêm, sửa, xóa bản ghi. Ta có thể áp các thay đổi này quay trở lại kho dữ

228

Tập bài giảng SQL Server

liệu gốc sau khi sử dụng Data Adapter. Dữ liệu trong đối tượng DataSet được duy trì trong Extensible Markup Language (XML), nghĩa là ta có thể lưu trữ DataSet như là

một file hoặc đơn giản chuyển nó trên Network. XML được bảo vệ từ ta, những người

phát triển, và chúng ta không bao giờ nên sửa trực tiếp XML. Tất cả các thao tác sửa

XML được thực hiện thông qua các thuộc tính và các phương thức của lớp DataSet.

Nhiều nhà phát triển thích sử dụng XML và lựa chọn để thao tác XML biểu diễn trực tiếp DataSet, nhưng điều này không cần thiết. Giống như bất cứ bản tài liệu XML nào, DataSet có một giản đồ-schema (một file cấu trúc của dữ liệu trên một hoặc

nhiều XML files). Khi ta sinh ra một kiểu Dataset dùng wizard, XML Schema

Definition (XSD) file được thêm vào Solution Explorer. File này là một XML schema

cho dữ liệu QLDiemSVDataSet chứa nó. Từ đây, Visual Studio .NET tạo ra một lớp

kế thừa từ DataSet và sử dụng giản đồ cụ thể này. Một lược đồ DataSet chứa các thông tin về các bảng dữ liệu, mối liên hệ và các ràng buộc được lưu trữ trong DataSet.

Thêm nữa, nó được bảo vệ từ phía ta, và ta không cần biết XML làm việc với DataSet.

Các phương thức của DataSet:

- Thêm một đối tượng DataTable

.Tables.Add()

- Xóa một đối tượng

.Tables.Remove()

.Tables.RemoveAt()

- Loại bỏ tất cả đối tượng DataTable:

.Tables.Clear()

- Kiểm tra sự tồn tại:

.Tables.Contains()

- Kiểm tra tồn tại và có thể xóa được

.Tables.CanRemove()

.Tables.Count()

- Đếm số lượng DataTable: - Ghi ra file XML:

.WriteXml(ten_file_xml)

- Đọc từ file XML: .ReadXml(ten_file_xml)

e) Lớp DataView

Lớp DataView được sử dụng để sắp xếp, lọc, tìm kiếm, sửa dữ liệu từ DataSet. Một DataView là bindable, nghĩa là nó có thể bị buộc vào các điều khiển giống như

cách DataSet bị buộc vào các điều khiển. Một DataSet có thể chứa một số các đối

229

Tập bài giảng SQL Server tượng DataTable; khi ta sử dụng phương thức Fill của lớp SqlDataAdapter để thêm dữ liệu vào DataSet, như vậy ta đã thực sự đang tạo một đối tượng DataTable bên trong

DataSet này. DataView cung cấp view thông dụng của DataTable; ta có thể sắp xếp và

lọc dữ liệu, như ta thực hiện trên truy vấn SQL.

Ta có thể tạo một DataView từ dữ liệu được chứa trong DataTable mà đang chỉ chứa dữ liệu mà ta muốn hiển thị. Ví dụ, nếu dữ liệu trong DataTable chứa tất cả các thí sinh được sắp xếp bởi họ tên, ta có thể tạo một DataView chứa tất cả khách hàng được sắp xếp bởi họ tên. Hoặc, nếu muốn, ta có thể tạo một DataView chỉ chứa một

vài thí sinh chứa tên nào đó.

Mặc dù ta có thể hiện thị dữ liệu trong DataView trong nhiều cách khác nhau từ

DataTable cơ bản, nó vẫn là cùng dữ liệu. Các thay đổi với DataView sẽ ảnh hưởng

tới DataTable cơ bản một cách tự động và các thay đổi với DataTable cơ bản tự động ảnh hưởng bất kỳ đối tượng DataView mà đang hiển thị DataTable đó. Kiến trúc cho

một lớp DataView khởi tạo một thể hiện mới của lớp DataView và lấy DataTable là

một đối số.

Cú pháp:

Dim ODV = New DataView(ODS.Tables(“Name_Table”))

Trong đó:

- ODV là đối tượng DataView

- ODS là đối tượng DataSet

- Name_Table: Tên bảng

Ví dụ: Tạo một đối tượng DataView và khởi tạo nó đang sử dụng bảng Thisinh

từ DataSet có tên là ODS.

Dim ODV = New DataView(ODS.Tables(“Thisinh”)) Các thuộc tính của DataView:

- Thuộc tính Sort: Được dùng để sắp xếp dữ liệu trong DataView bằng cách chỉ

định cột hoặc các cột mà ta muốn sắp xếp.

Cú pháp: ODV.Sort=”Name_Columns ASC/DESC”

Ví dụ: Sắp xếp danh sách thí sinh theo chiều giảm dần của điểm toán, điểm lý,

điểm hóa.

ODV.Sort = “dtoan, dly, dhoa DESC”

- Thuộc tính RowFilter: Xác định một điều kiện lọc mà có thể áp dụng được

trên DataView, chỉ những hàng thỏa mãn điều kiện sẽ được giữ lại trên DataView. Cú pháp cũng tương tự như mệnh đề SQL WHERE. Ta có thể sử dụng các phép toán logic

And và Or trong biểu thức điều kiện

230

Tập bài giảng SQL Server

Cú pháp: ODV.RowFilter =”Expression_Condition”

Trong đó: Expression_Condition là biểu thức điều kiện.

Ví dụ: Đưa ra danh sách thí sinh có họ “Lê”

ODV.RowFilter =”Hoten like „Lê%‟” Các phương thức: - Phương thức Find: Nếu ta muốn tìm kiếm cho một hàng dữ liệu trong DataView, ta sử dụng

phương thức Find. Phương thức Find tìm kiếm dữ liệu trong cột khóa sắp xếp của

DataView. Nhưng trước khi gọi phương thức Find, ta phải sắp xếp DataView trên cột

chứa dữ liệu mà ta muốn tìm kiếm. Cột trong DataView đã được sắp xếp trở thành cột

khóa sắp xếp trong đối tượng DataView.

Cú pháp:

intPosition = objDataView.Find(“Value”)

Trong đó:

+ intPosition: là vị trí tìm thấy, có giá trị nguyên.

+ Value: Giá trị cần tìm

Phương thức Find tìm kiếm và trả về vị trí của bản ghi trong DataView. Trong

trường hợp ngược lại, DataView trả về giá trị Null nếu không tìm thấy. Nếu phương

thức Find tìm thấy một bản khớp thì nó sẽ dừng tìm kiếm và trả về vị trí của bản ghi

đầu tiên tìm thấy. Nếu ta muốn có nhiều hơn một bản ghi trong Data Store, ta phải lọc

dữ liệu trong DataView, dữ liệu của ta sẽ được hiển thị. Phương thức Find không phân

biệt dạng chữ hoa, chữ thường. Phương thức Find tìm chính xác từng cụm từ, nghĩa là

ta phải nhập toàn bộ cụm từ đó.

Ví dụ: Tìm thí sinh có họ tên là Nguyễn Văn An.

Dim intPosition as Integer

ODV.Sort = “Hoten” intPosition = objDataView.Find(“Nguyễn Văn An”) DataView có thể được sắp xếp trên nhiều hơn một cột tại cùng một thời điểm.

Nếu ta muốn sắp xếp nhiều hơn một cột, ta cần cung cấp một mảng các giá trị để

phương thức Find thay cho chỉ một giá trị đơn.

Ví dụ: Tìm kiếm thí sinh „Nguyễn Văn An‟ quê quán „Nam Định‟.

Dim intPosition As Integer

Dim arrValues(1) As Object objDataView.Sort = “Hoten,quequan”

arrValues(0)= “Nguyễn Văn An”

231

Tập bài giảng SQL Server

arrValues(1) = “Nam Định” intPosition = objDataView.Find(arrValues)

8.2. Ví dụ minh họa

Thiết kế và lập trình các Form cho bài toán quản lý điểm trên nền Visual

Basic.Net. Trên form có các nút điều khiển: Di chuyển, tìm kiếm, thêm, sửa, xóa, thoát.

Ví dụ 1: Thiết kế và lập trình Form quản lý thông tin của sinh viên theo mẫu

sau

Hình 8.6. Form quản lý thông tin sinh viên

Bước 1: Chọn File/New Projects/Visual Basic/Windows/Windows Forms

Application/Nhập tên dự án tại hộp Name.

Hình 8.7. Cửa sổ tạo dự án

232

Tập bài giảng SQL Server

Bước 2: Tạo và thiết kế Form Quản lý thông tin sinh viên (frm_sinhvien)

STT Đối tƣợng Thuộc tính Giá trị

Name Frm_Sinhvien 1 Form Quản lý thông tin sinh viên Text

Mã sinh viên 2 Lable Text

3 Lable Text Họ tên

4 Lable Text Ngày sinh

5 Lable Text Giới tính

6 Lable Text Quê quán

7 Lable Text Mã lớp

8 Text Box Name Txt_masv

9 Text Box Name Txt_hoten

10 Text Box Name Txt_ns

11 Text Box Name Txt_gt

12 Text Box Name Txt_qq

13 Text Box Name Txt_mal

Name Btn_MoveFirst 14 Button Text Về đầu

Name Btn_MovePre 15 Button Text Trước

Name Btn_MoveNext 16 Button Text Tiếp

Name Btn_MoveLast 17 Button Text Về cuối

Name Btn_Add 18 Button Text Thêm

Name Btn_Update 19 Button Text Sửa

Name Btn_Delete 20 Button Text Xóa

Name Btn_Close 21 Button Text Thoát

Bước 3: Tạo kết nối bằng file config - Tạo bằng notepad server =Admin-0812qix; initial catalog =QLDiem; Integrated Security=true

233

Tập bài giảng SQL Server

- Lưu bằng đuôi *.ini với tên là config trong thư mục \bin\Debug của ứng dụng. Bước 4: Lập trình các sự kiện và thủ tục

- Khai báo của tên miền:

Imports System.Data

Imports System.Data.SqlClient Imports System.Configuration - Khai báo các đối tượng sử dụng trong phạm vi của form: Dim cnn As New SqlConnection()

Dim da As New SqlDataAdapter

Dim oDS As DataSet

Dim oDV As DataView

- Thủ tục gán giá trị của các trường trong bảng sinh viên lên các đối tượng trên

form.

Private Sub Display(ByVal i As Integer)

txt_masv.Text = tb.Rows(i).Item(0)

txt_hoten.Text = tb.Rows(i).Item(1)

txt_ns.Text = tb.Rows(i).Item(2)

txt_gt.Text = tb.Rows(i).Item(3)

txt_qq.Text = tb.Rows(i).Item(4)

txt_mal.Text = tb.Rows(i).Item(5)

End Sub

- Thủ tục hiện thị thông tin sinh viên lên trên form.

Private Sub DisplayTable()

Dim da As New SqlDataAdapter("Select * from sinhvien", cn) da.Fill(tb)

n = tb.Rows.Count

i = 0 Display(i)

Btn_MoveFirst.Enabled = False

Btn_MovePre.Enabled = False

End Sub

- Thủ tục Load của form.

Private Sub frm_sinhvien_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

Dim cnnstr As String

cnnstr = My.Computer.FileSystem.ReadAllText("config.ini")

234

Tập bài giảng SQL Server

cn.ConnectionString = cnnstr cn.Open()

DisplayTable()

End Sub

- Sự kiện click của nút Về đầu Private Sub Btn_MoveFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_MoveFirst.Click

If n <> 0 Then

i = 0

Display(i)

Btn_MoveNext.Enabled = True

Btn_MoveLast.Enabled = True Btn_MovePre.Enabled = False

Btn_MoveFirst.Enabled = False

End If

End Sub

- Sự kiện click của nút Về cuối

Private Sub Btn_MoveLast_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Btn_MoveLast.Click

If n > 0 Then

i = n - 1

Display(i)

Btn_MoveNext.Enabled = False

Btn_MoveLast.Enabled = False Btn_MovePre.Enabled = True

Btn_MoveFirst.Enabled = True

End If

End Sub - Sự kiện click của nút Trước

Private Sub Btn_MovePre_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Btn_MovePre.Click

If i > 0 Then

i = i - 1

Display(i) Btn_MoveNext.Enabled = True

Btn_MoveLast.Enabled = True

235

Tập bài giảng SQL Server If i = 0 Then Btn_MovePre.Enabled = False

Btn_MoveFirst.Enabled = False

End If

End If End Sub

- Sự kiện click của nút Tiếp Private Sub Btn_MoveNext_Click(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles Btn_MoveNext.Click

If i < n - 1 Then

i = i + 1

Display(i) Btn_MoveFirst.Enabled = True

Btn_MovePre.Enabled = True

If i = n - 1 Then

Btn_MoveLast.Enabled = False

Btn_MoveNext.Enabled = False

End If

End If

End Sub

- Thủ tục thiết lập giá trị của các đối tượng Text box trở thành trống

Private Sub Set_Null()

txt_masv.Text = ""

txt_hoten.Text = "" txt_gt.Text = ""

txt_ns.Text = ""

txt_qq.Text = "" txt_mal.Text = "" End Sub

- Thủ tục thiết lập giá trị của các nút lệnh

Private Sub Set_Enabled(ByVal lc As Boolean)

Btn_Delete.Enabled = lc

Btn_MoveFirst.Enabled = lc

Btn_MoveLast.Enabled = lc Btn_MoveNext.Enabled = lc

Btn_MovePre.Enabled = lc

236

Tập bài giảng SQL Server

End Sub - Sự kiện click của nút Thêm

Private Sub Btn_Add_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Btn_Add.Click

Dim sqlStr As String = "insert into sinhvien(Masv,hoten,ns, gt,diachi,malop) values (@Masv,@hoten,@ns, @gt,@diachi,@mal) "

Dim cd As New SqlCommand(sqlStr, cn) If Btn_Add.Text = "Thêm" Then

Btn_Add.Text = "Lưu"

Btn_Update.Text = "Hủy"

Set_Null()

Set_Enabled(False)

Else

Btn_Add.Text = "Thêm"

Btn_Update.Text = "Sửa"

Set_Enabled(True)

cd.Parameters.Add("@masv", SqlDbType.VarChar).Value

= txt_masv.Text

cd.Parameters.Add("@hoten", SqlDbType.VarChar).Value = txt_hoten.Text

cd.Parameters.Add("@ns", SqlDbType.Date).Value

= DateAndTime.DateValue(txt_ns.Text)

cd.Parameters.Add("@gt", SqlDbType.Varchar).Value

= txt_gt.Text

cd.Parameters.Add("@diachi", SqlDbType.VarChar).Value = txt_qq.Text

cd.Parameters.Add("@mal", SqlDbType.Varchar).Value

= txt_mal.Text

cd.ExecuteNonQuery() DisplayTable() End If

End Sub

- Sự kiện click của nút Sửa Private Sub Btn_Update_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Btn_Update.Click

Dim sqlstr As String = "update sinhvien set hoten=@hoten,ns=@ns, gt=@gt,diachi=@diachi, malop=@mal where masv=@masv"

Dim cd As New SqlCommand(sqlstr, cn)

237

Tập bài giảng SQL Server If Btn_Update.Text = "Sửa" Then Btn_Add.Text = "Lưu"

Btn_Update.Text = "Hủy"

Set_Enabled(False)

Else Btn_Add.Text = "Thêm" Btn_Update.Text = "Sửa" Set_Enabled(True)

i = 0

Display(i)

End If

End Sub

- Sự kiện click của nút Xóa

Private Sub Btn_Delete_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Btn_Delete.Click

Dim sqlstr As String

sqlstr = "Delete from sinhvien where masv=@masv"

Dim cmd As New SqlCommand(sqlstr, cn)

cmd.Parameters.Add("@masv", SqlDbType.NVarChar).Value

= txt_masv.Text

If MsgBox("Bạn có muốn xóa sinh viên này không ?", MsgBoxStyle.OkCancel,

"Thông báo") = MsgBoxResult.Ok Then

cmd.ExecuteNonQuery()

DisplayTable() End If

End Sub

- Sự kiện click của nút Thoát Private Sub Btn_New_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Close.Click

Me.Close()

End Sub Chú ý rằng các sự kiện thêm, sửa, xóa ta có thể dùng thủ tục lưu trữ (Stored

Procedure) để thay cho việc viết các câu lệnh trực tiếp trong môi trường VB.Net. Ưu

điểm của việc sử dụng thủ tục lưu trữ là ta có thể kiểm soát được dữ liệu khi thêm, sửa xóa.

Trong SQL Server ta tạo các thủ tục sau:

238

Tập bài giảng SQL Server

- Thủ tục thêm bản ghi cho bảng sinh viên: CREATE PROCEDURE sp_Insert_SV

@masv as nvarchar(10),

@hoten as nvarchar(50),

@ns as date, @gt as nvarchar(3), @diachi as nvarchar(30), @mal as nvarchar(20)

AS

BEGIN

declare @kt as bit

set @kt=1 if exists (select 'true' from sinhvien where masv=@masv)

begin

set @kt=0

raiserror('Mã sinh viên bị trùng',16,6)

end

if LEN(@masv)=0

begin

set @kt=0

raiserror('Mã sinh viên không hợp lệ',16,6)

end

if LEN(@hoten)=0

begin set @kt=0

raiserror('Họ tên sinh viên không hợp lệ',16,6)

end if LEN(@diachi)=0 begin

set @kt=0

raiserror('Địa chỉ không hợp lệ',16,6)

end

if LEN(@mal)=0

begin set @kt=0

raiserror('Mã lớp không hợp lệ',16,6)

239

Tập bài giảng SQL Server

end if @kt=1

begin

insert into sinhvien(Masv,hoten,ns, gt,diachi,malop)

values (@Masv,@hoten,@ns , @gt, @diachi ,@mal) end END - Thủ tục cập nhật bản ghi cho bảng sinh viên:

CREATE PROCEDURE [dbo].[sp_UPDATE_SV]

@masv as nvarchar(10),

@hoten as nvarchar(50),

@ns as date, @gt as nvarchar(3),

@diachi as nvarchar(30),

@mal as nvarchar(20)

AS

BEGIN

declare @kt as bit

set @kt=1

if LEN(@masv)=0

begin

set @kt=0

raiserror('Mã sinh viên không hợp lệ',16,6)

end

if LEN(@hoten)=0

begin set @kt=0 raiserror('Họ tên sinh viên không hợp lệ',16,6)

end

if LEN(@diachi)=0 begin

set @kt=0

raiserror('Địa chỉ không hợp lệ',16,6)

end

if LEN(@mal)=0

240

Tập bài giảng SQL Server

begin set @kt=0

raiserror('Mã lớp không hợp lệ',16,6)

end

if @kt=1 begin update sinhvien set hoten=@hoten,ns=@ns,

gt=@gt,diachi=@diachi, malop=@mal

where masv=@masv

end

END - Thủ tục xóa sinh viên:

CREATE PROCEDURE sp_Delete_SV

@masv as nvarchar(10)

AS

BEGIN

delete from sinhvien where masv=@masv

delete from diem where masv=@masv

END

Sau khi đã tạo các thủ tục lưu trữ, ta có thể sử dụng chúng để lập trình các sự

kiện thêm, sửa, xóa.

- Sự kiện click của nút Thêm

Private Sub Btn_Add_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Add.Click

Dim cd As New SqlCommand()

cd.Connection = cn cd.CommandText = "sp_Insert_SV" cd.CommandType = CommandType.StoredProcedure

If Btn_Add.Text = "Thêm" Then

Btn_Add.Text = "Lưu" Btn_Update.Text = "Hủy"

Set_Null()

Set_Enabled(False)

Else

Btn_Add.Text = "Thêm"

241

Btn_Update.Text = "Sửa"

Tập bài giảng SQL Server Set_Enabled(True)

cd.Parameters.Add("@masv", SqlDbType.VarChar).Value

= txt_masv.Text

cd.Parameters.Add("@hoten", SqlDbType.VarChar).Value = txt_hoten.Text

cd.Parameters.Add("@ns", SqlDbType.Date).Value = DateAndTime.DateValue(txt_ns.Text) cd.Parameters.Add("@gt", SqlDbType.Varchar).Value

= txt_gt.Text

cd.Parameters.Add("@diachi", SqlDbType.VarChar).Value = txt_qq.Text

cd.Parameters.Add("@mal", SqlDbType.Varchar).Value

= txt_mal.Text cd.ExecuteNonQuery()

DisplayTable()

End If

End Sub

- Sự kiện click của nút Sửa

Private Sub Btn_Update_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Btn_Update.Click

Dim cd As New SqlCommand()

cd.Connection = cn

cd.CommandText = "sp_Update_SV"

cd.CommandType = CommandType.StoredProcedure

If Btn_Update.Text = "Sửa" Then Btn_Add.Text = "Lưu"

Btn_Update.Text = "Hủy"

Set_Enabled(False) Else Btn_Add.Text = "Thêm"

Btn_Update.Text = "Sửa"

Set_Enabled(True) i = 0

Display(i)

End If End Sub

- Sự kiện click của nút Xóa

242

Tập bài giảng SQL Server

Private Sub Btn_Delete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Delete.Click

Dim cd As New SqlCommand()

cd.Connection = cn

cd.CommandText = "sp_Delete_SV" cd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("@masv", SqlDbType.NVarChar).Value = txt_masv.Text

If MsgBox("Bạn có muốn xóa sinh viên này không ?", MsgBoxStyle.OkCancel,

"Thông báo") = MsgBoxResult.Ok Then

cmd.ExecuteNonQuery()

DisplayTable() End If

End Sub

Ví dụ 2: Thiết kế và lập trình Form quản lý thông tin của sinh viên theo mẫu sau.

Trên form cho phép sắp xếp và tìm kiếm theo mã sinh viên, họ tên, ngày sinh, địa chỉ.

Hình 8.8. Form sắp xếp và tìm kiếm sinh viên

Bước 1: Trong cửa sổ Solution Explorer-QLDiem, chọn dự án QLDiem/Chọn

chuột phải/Chọn Add/Chọn Window Forms/Nhập tên form tại mục Name/Add

243

Tập bài giảng SQL Server

Hình 8.9. Tạo một form mới

Bước 2: Tạo một View đặt tên là lop, chỉ lấy thông tin của mã lớp.

Hình 8.10. Tạo View lớp

Bước 3: Thiết kế Form Quản lý thông tin sinh viên (frm_SVTK)

STT Đối tƣợng Thuộc tính Giá trị

Name Frm_SVTK Form 1 Quản lý thông tin sinh viên Text

Mã lớp Text Lable 2

Sắp xếp Text Group Box 3

Tìm kiếm Text Group Box 4

Cb_malop Name Combo 5

Cb_Sort Name

Combo tên, 6 Items Mã sinh viên, Họ Ngày sinh, Quê quán

Name Cb_malop

7 Combo Mã sinh viên, Họ tên, Items Ngày sinh, Quê quán

8 DataGridView Name Dgv_SV

9 Button Name Btn_Sort

244

Tập bài giảng SQL Server

Text Sắp xếp

Name Btn_Search 10 Button Text Tìm kiếm

Bước 4: Lập trình các sự kiện và thủ tục

- Khai báo của tên miền:

Imports System.Data

Imports System.Data.SqlClient

Imports System.Configuration - Khai báo các đối tượng sử dụng trong phạm vi của form:

Dim cnn As New SqlConnection()

Dim da As New SqlDataAdapter

Dim oDS As DataSet Dim oDV As DataView

- Thủ tục đưa dữ liệu của bảng sinh viên lên đối tượng DataGridView.

Private Sub FillDataSetAndView()

oDS = New DataSet()

da.SelectCommand = New SqlCommand()

da.SelectCommand.Connection = cnn da.SelectCommand.CommandText = "SELECT * FROM Sinhvien WHERE

MaLop= '"&cb_malop.SelectedItem(0)&"'"

da.SelectCommand.CommandType = CommandType.Text

da.Fill(oDS, "Sinhvien")

oDV = New DataView(oDS.Tables("Sinhvien"))

End Sub

- Thủ tục trang trí đối tượng DataGridView.

Private Sub Grid()

Dgv_SV.Columns(0).HeaderText = "Mã sinh viên" Dgv_SV.Columns(1).HeaderText = "Họ tên"

Dgv_SV.Columns(2).HeaderText = "Ngày sinh" Dgv_SV.Columns(3).HeaderText = "Giới tính" Dgv_SV.Columns(4).HeaderText = "Địa chỉ" Dgv_SV.Columns(5).HeaderText = "Mã lớp" End Sub - Sự kiện Change của cb_malop Private Sub cb_malop_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cb_malop.SelectedIndexChanged

245

Tập bài giảng SQL Server

FillDataSetAndView() Me.Dgv_SV.DataSource = oDS

Me.Dgv_SV.DataMember = "Sinhvien"

Grid()

End Sub - Sự kiện Load của Form Private Sub frm_SVTK_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim cnnstr As String = My.Computer.FileSystem.ReadAllText("config.ini")

cnn.ConnectionString = cnnstr

cnn.Open()

Dim oDL As New SqlDataAdapter() Dim oDSL As New DataSet()

oDL.SelectCommand = New SqlCommand()

oDL.SelectCommand.Connection = cnn

oDL.SelectCommand.CommandText= SELECT MaLop FROM lop"

oDL.SelectCommand.CommandType = CommandType.Text

oDL.Fill(oDSL, "lop")

Me.cb_malop.DataSource = oDSL.Tables("Lop")

Me.cb_malop.DisplayMember = "Malop"

Me.cb_malop.ValueMember = "MaLop"

FillDataSetAndView()

Me.Dgv_SV.AutoGenerateColumns = True

Me.Dgv_SV.DataSource = oDV Grid()

End Sub

- Sự kiện Click của nút Sắp xếp Private Sub btn_Sort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Sort.Click

FillDataSetAndView()

Select Case cb_Sort.SelectedIndex

Case 0

oDV.Sort = "Masv"

Case 1 oDV.Sort = "Hoten"

Case 2

246

Tập bài giảng SQL Server

oDV.Sort = "ns" Case 3

oDV.Sort = "diachi"

End Select

Me.Dgv_SV.AutoGenerateColumns = True Me.Dgv_SV.DataSource = oDV Grid()

End Sub

- Sự kiện Click của nút Tìm kiếm

Private Sub btn_Search_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles btn_Search.Click

Dim ma_sv As String Dim hoten As String

Dim ns As String

Dim dc As String

Dim intPosition As Integer

Select Case cb_Search.SelectedIndex

Case 0

oDV.Sort = "Masv"

ma_sv = InputBox("Nhập mã sinh viên")

intPosition = oDV.Find(ma_sv)

oDV.RowFilter = "masv='" & ma_sv & "'"

Case 1

oDV.Sort = "Hoten" hoten = InputBox("Nhập họ tên sinh viên")

intPosition = oDV.Find(hoten)

oDV.RowFilter = "hoten='" & hoten & "'" Case 2 oDV.Sort = "ns"

ns = InputBox("Nhập ngày sinh của sinh viên")

intPosition = oDV.Find(ns) oDV.RowFilter = "ns=#" & ns & "#"

Case 3

oDV.Sort = "diachi" dc = InputBox("Nhập địa chỉ của sinh viên")

intPosition = oDV.Find(dc)

247

Tập bài giảng SQL Server oDV.RowFilter = "diachi='" & dc & "'" End Select

If intPosition > 0 Then

Me.Dgv_SV.AutoGenerateColumns = True

Me.Dgv_SV.DataSource = oDV Grid() Else MsgBox("Không tìm thấy")

End If

End Sub

248

Tập bài giảng SQL Server

BÀI TẬP

Bài số 1: Cho CSDL quản lý điểm (QLD) gồm các bảng sau

SV(MaSV, Hoten, GT, NS, QQ, MaL): Chứa thông tin về các sinh viên. HP(MaHP, TenHP, SoTC, HK): Chứa thông tin về các học phần.

Diem(MaSV, MaHP, Diem): Chứa thông tin về điểm của từng học phần của từng

sinh viên.

Trong đó: MaSV-Mã sinh viên, Hoten-Họ tên sinh viên, GT-Giới tính, NS-Ngày sinh, QQ-Quê quán, MaHP-Mã học phần, TenHP-Tên học phần, SoTC-Số tín chỉ, HK-

Học kỳ, Diem-Điểm.

Câu 1: Tạo lập cơ sở dữ liệu: 1. Tạo cơ sở dữ liệu với tên là QLD. 2. Tạo các bảng dữ liệu 3. Thiết kế ràng buộc khóa chính, khóa ngoại, ràng buộc duy nhất, ràng buộc kiểm

tra, ràng buộc mặc định cho mỗi bảng dữ liệu.

4. Tạo Diagrams cho cơ sở dữ liệu 5. Tạo chỉ mục: liên cung, phi liên cung, không gian. 6. Nhập tối thiểu 10 bản ghi cho mỗi bảng (Nhập trực tiếp hoặc nhập từ file).

Câu 2: Tạo View thực hiện các công việc sau: 1. Đưa ra các thông tin: Mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính của các

sinh viên nữ có quê quán ‟Nam Dinh‟ hoặc „Can Tho‟.

2. Đưa ra các thông tin: Mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính, tên học phần, điểm của các sinh viên lớp „Tin 32‟ có điểm học phần ‟CSDLQH‟ lớn

hơn 8.

3. Đưa ra các thông tin: học kì, mã học phần, tên học phần, số tín chỉ, số sinh viên thi

lại từng học phần của từng kỳ mà có số sinh viên thi lại nhỏ hơn 10.

4. Đưa ra các thông tin: họ và tên sinh viên, ngày sinh, giới tính, tổng điểm, điểm

trung bình học phần của mỗi sinh viên trong kỳ 2.

5. Đưa ra các thông tin: họ và tên sinh viên, ngày sinh, giới tính của những thí sinh chưa dự thi môn nào. Danh sách đưa ra sắp xếp theo chiều giảm dần của ngày sinh. 6. Đưa ra các thông tin: học kỳ, mã học phần học, tên học phần học, số sinh viên có

điểm lớn hơn 5 của từng học phần của từng kỳ.

7. Đưa ra các thông tin: mã lớp, mã học phần, tên học phần, số tín chỉ, số sinh viên thi

lại từng học phần của từng lớp mà có số sinh viên thi lớn hơn 2.

8. Đưa ra các thông tin: mã lớp, mã học phần, tên học phần, số tín chỉ, số sinh viên

không phải thi lại từng học phần của từng lớp mà có số sinh viên lớn hơn 2.

249

Tập bài giảng SQL Server Biết rằng sinh viên thi lại là sinh viên có điểm thi nhỏ hơn 5. Điểm trung

bình=(Điểm thi*Số tín chỉ)/Số tín chỉ.

Câu 3: Hãy viết các Stored Procedure để thực hiện các công việc sau: 1. Đưa ra các thông tin: Mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính, tên học phần, điểm thi của sinh viên lớp „Tin 31‟ hoặc lớp „Tin K5A‟ có học kì cho

trước.

2. Đưa ra các thông tin: Mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính, tên

học phần, điểm thi, học kì của các sinh viên có mã lớp cho trước.

3. Đưa ra các thông tin: Mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính của

những sinh viên chưa dự thi môn nào.

4. Đưa ra các thông tin: mã lớp, học kì, mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính, tên học phần, điểm thi của các sinh viên có điểm thi học phần đó lớn hơn

5 với mã lớp và học kỳ cho trước.

5. Đưa ra các thông tin gồm: mã lớp, số sinh viên của từng lớp mà có số sinh viên lớn

hơn 50. Danh sách sắp xếp theo chiều tăng dần của số sinh viên.

6. Thêm bản ghi cho bảng sinh viên (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu) 7. Thêm bản ghi cho bảng học phần học (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu). 8. Thêm bản ghi cho bảng điểm (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ

liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu).

9. Xóa các sinh viên mà có điểm trung bình nhỏ hơn 2.0. 10. Tăng số đơn vị học trình của những học phần thuộc học kỳ 2 lên 1 đơn vị học trình, giảm đơn vị học trình của những học phần thuộc học kỳ 1 đi 1 đơn vị học trình.

Câu 4: Xây dựng hàm 1. Xây dựng một hàm xét loại học lực cho mỗi sinh viên. Biết rằng nếu điểm trung

bình (DTBHK)  8.4 thì xếp loại giỏi, 7.0  DTBHK < 8.4 thì xếp loại khá, 5.0 

DTBHK < 6.9 thì xếp loại trung bình, ngược lại xếp loại yếu. Sau đó, sử dụng hàm này

xây dựng một hàm trả về một bảng gồm các thông tin: mã sinh viên, họ tên, ngày sinh, điểm trung bình, xếp loại học lực của từng kỳ. 2. Xây dựng một hàm xét học bổng cho mỗi sinh viên của một học kỳ. Biết rằng nếu

điểm trung bình học kỳ (DTBHKHK)  9.0 thì được 240.000/tháng, 8.0  DTBHKHK

< 9 thì được 180.000/tháng, 7.0  DTBHKHK < 8 thì được 150.000/tháng. Sau đó sử

dụng hàm này xây dựng một hàm trả về một bảng gồm các thông tin: kỳ, mã sinh viên, họ tên, ngày sinh, điểm trung bình, mức học bổng.

250

Tập bài giảng SQL Server

3. Xây dựng một hàm trả về một bảng gồm các thông tin sau: mã lớp, số sinh viên, điểm trung bình học phần có mã học phần là „PTTK‟ hoặc „CSDL‟.

4. Xây dựng một hàm trả về một bảng gồm các thông tin sau: mã lớp, mã sinh viên, họ

và tên, học kỳ, điểm trung bình của mỗi học kỳ, của mỗi sinh viên mà có điểm trung

bình lớn nhất với học kỳ cho trước.

Câu 5: Viết các Trigger 1. Tạo Trigger cho bảng sinh viên theo yêu cầu sau:

 Khi thêm mới một sinh viên thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không

trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Chỉ cho phép xóa thí sinh mà có điểm trung bình toàn khóa nhỏ hơn 1.0. + Khi cập nhật mã sinh viên thì mã sinh viên trong bảng điểm cũng được cập nhật

theo. 2. Tạo Trigger cho bảng học phần học theo yêu cầu sau:

 Khi thêm mới học phần học thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không

trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Khi xóa bản ghi ở bảng học phần học thì bản ghi tương ứng ở bảng điểm cũng bị

xóa.

 Không cho phép cập nhật số đơn vị học trình lớn hơn 10 và nhỏ hơn 0.

3. Tạo Trigger cho bảng điểm theo yêu cầu sau:

 Khi thêm mới một bản ghi thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không

trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Chỉ cho phép xóa 2 bản ghi trở xuống.

 Không cho phép cập nhật điểm thi lớn hơn 10 và nhỏ hơn 0.

Câu 6: Các thao tác trên cơ sở dữ liệu

1. Thiết lập cấu hình dịch vụ của SQL Server.

2. Tạo file sao lưu cho cơ sở dữ liệu trên với tên là „QLD_Backup‟ thuộc loại full backup, Transaction log và differential backup, khôi phục dữ liệu từ file sao lưu đã tạo. 3. Tách bỏ cơ sở dữ liệu khỏi SQL Server. 4. Xuất file cơ sở dữ liệu sang dạng Text, Access, Excel, SQL Server.

5. Tạo lịch trình sao lưu tự động cho cơ sở dữ liệu trên vào 17h hàng ngày 6. Tạo lịch trình sao lưu tự động cho cơ sở dữ liệu trên vào 8h sáng thứ 3 hàng tuần. Câu 7: Quản lý bảo mật và người dùng 1. Tạo người dùng đăng nhập bằng tài khoản SQL Server, bằng tài khoản của Window. 2. Gắn các nhóm quyền cho người dùng.

3. Gắn các vai trò cho người dùng.

4. Cấp quyền sử dụng select, update, insert, delete trên bảng cho người dùng.

251

Tập bài giảng SQL Server Hướng dẫn giải

Câu 1: Tạo lập cơ sở dữ liệu: 1. Tạo cơ sở dữ liệu với tên là QLD.

Bước 1: Chọn Databases/Chọn New Database

Hình 9.1. Tạo cơ sở dữ liệu

Bước 2: Nhập tên cơ sở dữ liệu vào mục Database name là QLD/Chọn OK

Hình 9.2. Xác định các thông số của cơ sở dữ liệu

2. Tạo các bảng dữ liệu - Tạo bảng sinh viên

Bước 1: Chọn Tables/Chọn New Table

252

Tập bài giảng SQL Server

Hình 9.3. Tạo bảng dữ liệu

Bước 2: Thiết kế bảng dữ liệu

- Nhập tên trường

- Chọn kiểu dữ liệu thích hợp

Hình 9.4. Thiết kế bảng dữ liệu

Bước 3: Lưu bảng dữ liêu: Chọn nút Save/Nhập tên bảng/Chọn OK.

Hình 9.5. Lưu bảng dữ liệu

- Tạo bảng điểm và học phần (Sinh viên tự làm) 3. Thiết kế ràng buộc khóa chính, khóa ngoại, ràng buộc duy nhất, ràng buộc kiểm

tra, ràng buộc mặc định cho mỗi bảng dữ liệu. - Thiết kế ràng buộc khóa chính cho bảng sinh viên Bước 1: Chọn tên bảng/Chọn chuột phải/Chọn Design. Bước 2: Chọn trường mã sinh viên//Chọn chuột phải/Chọn Set Primary Key.

253

Tập bài giảng SQL Server

Hình 9.6. Tạo khóa chính

- Thiết kế ràng buộc khóa ngoại

+ Bảng điểm với bảng sinh viên

Bước 1: Chọn tên bảng/Keys/Chọn chuột phải/Chọn New Foreign Key.

Hình 9.7. Tạo khóa ngoại

Bước 2: Chọn dấu 3 chấm tại mục Tables and Columns Specical.

Hình 9.8. Xác định các thông số của khóa ngoại

Bước 3: Chọn bảng và trường của khóa chính/Chọn bảng và trường khóa

ngoại/Chọn OK.

254

Tập bài giảng SQL Server

Hình 9.9. Chọn trường cho khóa chính-khóa ngoại

+ Bảng điểm với bảng học phần(Tương tự)

- Thiết kế ràng buộc duy nhất cho trường tên học phần

Bước 1: Chọn tên bảng/Chọn Indexes/Chọn New Index.

Hình 9.10. Tạo ràng buộc duy nhất

Bước 2: Nhập tên ràng buộc tại mục Index Name/Chọn loại Index tại mục

Index Type/Đánh dấu mục chọn Unique/Chọn nút Add.

255

Tập bài giảng SQL Server

Hình 9.11. Nhập tên cho ràng buộc duy nhất

Bước 3: Chọn đánh dấu vào trường tenhp/chọn OK/Chọn OK.

Hình 9.12. Chọn trường làm ràng buộc duy nhất

- Thiết kế ràng buộc kiểm tra cho trường điểm Bước 1: Chọn tên bảng/Chọn Constraints/Chọn chuột phải/Chọn New Constraints.

256

Tập bài giảng SQL Server

Hình 9.13. Tạo ràng buộc kiểm tra

Bước 2: Nhập tên cho ràng buộc tại mục Name/ Chọn nút … tại mục

Expresstion.

Hình 9.14. Nhập tên cho ràng buộc kiểm tra

Bước 3: Nhập điều kiện ràng buộc/Chọn OK

Hình 9.15. Nhập điều kiện cho ràng buộc kiểm tra

- Thiết kế ràng buộc mặc định cho trường giới tính Chọn tên trường cần tạo ràng buộc mặc nhiên/Nhập giá trị mặc định tại mục Default Value or Binding.

257

Tập bài giảng SQL Server

Hình 9.16. Tạo ràng buộc mặc định

4. Tạo Diagrams cho cơ sở dữ liệu Bước 1: Chọn cơ sở dữ liệu/Chọn Database Diagrams/Chọn New Database Diagrams.

Hình 9.17. Tạo kết nối giữa các bảng

Bước 2: Chọn bảng/Chọn nút Add. Khi chọn xong các bảng cần tạo kết nối thì

chọn nút Close.

Hình 9.18. Chọn các bảng dữ liệu

258

Tập bài giảng SQL Server

Bước 3: Chọn trường mã sinh viên trong bảng sinh viên kéo thả vào trường mã

sinh viên trong bảng điểm.

Hình 9.19. Tạo kết nối

Bước 4: Kiểm tra trường kết nối/ Chọn OK.

Hình 9.20. Kiểm tra trường kết nối

Bước 5: Xác nhận mối kết nối/ Chọn OK.

Hình 9.21. Xác nhận mối kết nối

Bước 6: Lưu mối kết nối. Chọn nút Save/Nhập tên mối kết nối/OK.

259

Tập bài giảng SQL Server

Hình 9.22. Lưu mối kết nối

5. Tạo chỉ mục liên cung cho bảng sinh viên.

Bước 1: Chọn tên bảng/Chọn Indexes/Chọn chuột phải/Chọn New Index

Hình 9.23. Tạo chỉ mục

Bước 2: Xác định các thông số

- Nhập tên chỉ mục tại mục Index Name

- Chọn kiểu Index tại mục Type Index: Clustered - Chọn nút Add

Hình 9.24. Chọn các thông số cho chỉ mục

260

Tập bài giảng SQL Server

Bước 3: Chọn trường làm chỉ mục/Chọn OK.

Hình 9.25. Chọn trường làm chỉ mục

Các loại chỉ mục khác tương tự.

6. Nhập dữ liệu cho các bảng dữ liệu từ file Access Bước 1: Chọn tên cơ sở dữ liệu/Chọn chuột phải/Chọn Câus/Chọn Import Data.

Hình 9.26. Chọn chức năng Import

Bước 2: Chọn cơ sở dữ liệu nguồn: Chọn Mircosoft Access tại mục Data

Source/Chọn Brower/Chọn file Access/Chọn OK/Chọn Next.

261

Tập bài giảng SQL Server

Hình 9.27. Chọn dữ liệu nguồn

Bước 3: Chọn cơ sở dữ liệu đích: Chọn trình điều khiển cho loại dữ liệu tại mục

Destination/Chọn tên máy tại mục Server Name/Chọn quyền đăng nhập tại mục

Authentication/Chọn cơ sở dữ liệu đích tại mục Database/Chọn Next.

Hình 9.28. Chọn dữ liệu đích

Bước 4: Chọn hình thức Import/Chọn Next.

262

Tập bài giảng SQL Server

Hình 9.29. Chọn phương thức Import

Bước 5: Chọn các bảng dữ liệu có trong tập tin Access/Chọn Next.

Hình 9.30. Chọn các Sheet chứa dữ liệu Bước 6: Chọn phương thức thực thi và lưu trữ file đóng gói/Chọn Next.

263

Tập bài giảng SQL Server

Hình 9.31. Thực thi và lưu trữ file đóng gói

Bước 7: Chọn nút Finish để thực hiện Import.

Hình 9.32. Thực hiện Import

Câu 2: Tạo View thực hiện các công việc sau:

1. Đưa ra các thông tin: Mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính của

các sinh viên nữ có quê quán ‟Nam Dinh‟ hoặc „Can Tho‟. Bước 1: Chọn cơ sở dữ liệu/Chọn Views/Chọn chuột phải/Chọn New View.

264

Tập bài giảng SQL Server

Hình 9.33. Tạo view

Bước 2: Chọn dữ liệu nguồn cho View: Chọn mục Tables/Chọn bảng sinh

viên/Chọn Add/Chọn OK.

Hình 9.34. Chọn dữ liệu nguồn cho view

Bước 3: Thiết kế View

Hình 9.35. Thiết kế View ý 1

265

Tập bài giảng SQL Server

Bước 4: Lưu view

Bước 5: Chạy View bằng cách chọn nút trên thanh công cụ.

2. Đưa ra các thông tin: Mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính, tên học phần, điểm của các sinh viên lớp „Tin 32‟ có điểm học phần ‟CSDLQH‟ lớn hơn 8.

Bước 1: Chọn cơ sở dữ liệu/Chọn Views/Chọn chuột phải/Chọn New View.

Bước 2: Chọn dữ liệu nguồn cho View: Chọn mục Tables/Chọn bảng sinh

viên/Chọn Add/Chọn bảng điểm/Chọn Add/ Chọn bảng học phần/Chọn Add/Chọn OK.

Bước 3: Tạo kết nối giữa các bảng

Bước 4: Thiết kế View

Hình 9.36. Thiết kế View ý 2

Bước 5: Lưu view

3. Đưa ra các thông tin: học kì, mã học phần, tên học phần, số tín chỉ, số sinh viên

thi lại từng học phần của từng kỳ mà có số sinh viên thi lại nhỏ hơn 10. Bước 1: Chọn cơ sở dữ liệu/Chọn Views/Chọn chuột phải/Chọn New View.

Bước 2: Chọn dữ liệu nguồn cho View: Chọn mục Tables/Chọn bảng

điểm/Chọn Add/ Chọn bảng học phần/Chọn Add/Chọn OK.

Bước 3: Tạo kết nối giữa các bảng

Bước 4: Thiết kế View

266

Tập bài giảng SQL Server

Hình 9.37. Thiết kế View ý 3

Bước 5: Lưu view

4. Đưa ra các thông tin: họ và tên sinh viên, ngày sinh, giới tính, tổng điểm, điểm

trung bình học phần của mỗi sinh viên trong kỳ 2.

Bước 1: Chọn cơ sở dữ liệu/Chọn Views/Chọn chuột phải/Chọn New View.

Bước 2: Chọn dữ liệu nguồn cho View: Chọn mục Tables/Chọn bảng sinh

viên/Chọn Add/Chọn bảng điểm/Chọn Add/ Chọn bảng học phần/Chọn Add/Chọn

OK.

Bước 3: Tạo kết nối giữa các bảng

Bước 4: Thiết kế View

Hình 9.38. Thiết kế View ý 4

Bước 5: Lưu view

5. Đưa ra các thông tin: họ và tên sinh viên, ngày sinh, giới tính của những thí sinh chưa dự thi môn nào. Danh sách đưa ra sắp xếp theo chiều giảm dần của ngày sinh.

Bước 1: Chọn cơ sở dữ liệu/Chọn Views/Chọn chuột phải/Chọn New View.

267

Tập bài giảng SQL Server

Bước 2: Chọn dữ liệu nguồn cho View: Chọn mục Tables/Chọn bảng sinh

viên/Chọn Add/Chọn OK.

Bước 3: Thiết kế View

Hình 9.39. Thiết kế View ý 5

Các ý còn lại tương tự.

Câu 3: Hãy viết các Stored Procedure để thực hiện các công việc sau: 1. Đưa ra các thông tin: Mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính, tên học phần, điểm thi của sinh viên lớp „Tin 31‟ hoặc lớp „Tin K5A‟ có học kì cho trước.

CREATE PROCEDURE sp_e1_t3_y1

@ky as nvarchar(1)

AS

BEGIN

Select Sinhvien.masv, hoten, ns, gt, tenhp, diem From Sinhvien inner join Diem on Sinhvien.masv=diem.masv inner join

Hocphan on diem.mahp=Hocphan.Mahp

Where (malop='Tin 31' or malop='Tin 5A') and hocky=@ky

END

2. Đưa ra các thông tin: Mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính, tên học

phần, điểm thi, học kì của các sinh viên có mã lớp cho trước.

CREATE PROCEDURE sp_e1_t3_y2 @mal as nvarchar(10) AS BEGIN Select Sinhvien.masv, hoten, ns, gt, tenhp, diem, hocky

268

Tập bài giảng SQL Server

From Sinhvien inner join Diem on Sinhvien.masv=diem.masv inner join Hocphan on diem.mahp=Hocphan.Mahp

Where malop=@mal

END

3. Đưa ra các thông tin: Mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính của

những sinh viên chưa dự thi môn nào.

CREATE PROCEDURE sp_e1_t1_y3 AS

BEGIN

select masv, hoten, ns, gt

from Sinhvien

where masv not in (select masv from Diem)

END

4. Đưa ra các thông tin: mã lớp, học kì, mã sinh viên, họ và tên sinh viên, ngày sinh, giới tính, tên học phần, điểm thi của các sinh viên có điểm thi học phần đó lớn hơn

5 với mã lớp và học kỳ cho trước.

CREATE PROCEDURE sp_e1_t3_y4

@mal as nvarchar(10)

@ky as nvarchar(1)

AS

BEGIN

Select Malop, hocky, Sinhvien.masv, hoten, ns, gt, tenhp, diem

From Sinhvien inner join Diem on Sinhvien.masv=diem.masv inner join

Hocphan on diem.mahp=Hocphan.Mahp Where malop=@mal and diem>5 and hocky=@ky

END

5. Đưa ra các thông tin gồm: mã lớp, số sinh viên của từng lớp mà có số sinh viên lớn

hơn 50. Danh sách sắp xếp theo chiều tăng dần của số sinh viên.

CREATE PROCEDURE sp_e1_t3_y5

AS

BEGIN Select Malop, count(masv) as sosv

From Sinhvien

Group by malop Having count(masv)>50

Order by count(masv) Asc

269

Tập bài giảng SQL Server

END

6. Thêm bản ghi cho bảng sinh viên (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ

liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu)

Đã làm trong ví dụ 2 chương 8.

7. Thêm bản ghi cho bảng học phần học (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu).

CREATE PROCEDURE sp_Insert_HP @mahp as nvarchar(10),

@tenhp as nvarchar(50),

@sotc as int,

@hocky as nvarchar(2)

AS BEGIN

declare @kt as bit

set @kt=1

if exists (select 'true' from hocphan where mahp=@mahp)

begin

set @kt=0

raiserror('Mã học phần bị trùng',16,6)

end

if LEN(@mahp)=0

begin

set @kt=0

raiserror('Mã học phần không hợp lệ',16,6)

end

if LEN(@tenhp)=0

begin set @kt=0 raiserror('Tên học phần không hợp lệ',16,6)

end

if sotc<0 begin

set @kt=0

raiserror('Số tín chỉ không hợp lệ',16,6)

end

if @kt=1

270

Tập bài giảng SQL Server

begin insert into hocphan(Mahp,tenhp,sotc, hocky)

values (@Mahp,@tenhp,@sotc,@hocky)

end

END

8. Thêm bản ghi cho bảng điểm (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ liệu

cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu).

CREATE PROCEDURE sp_Insert_Diem

@masv as nvarchar(10),

@mahp as nvarchar(50),

@diem as float

AS BEGIN

declare @kt as bit

set @kt=1

if not exists (select „True‟ from sinhvien where masv=@masv)

begin

set @kt=0

raiserror('Mã sinh viên không tồn tại trong bảng sinh viên',16,6)

end

if not exists (select „True‟ from hocphan where mahp=@mahp)

begin

set @kt=0

raiserror('Mã học phần không tồn tại trong bảng học phần',16,6) end

if @diem<0 or @diem>10

begin set @kt=0 raiserror('Điểm thi không hợp lệ',16,6)

end

if @kt=1

begin

insert into Diem(Masv,Mahp,diem)

values (@Masv,@Mahp,@diem) end

END

271

Tập bài giảng SQL Server 9. Xóa các sinh viên mà có điểm trung bình nhỏ hơn 2.0.

CREATE PROCEDURE sp_e1_t1_y9

AS

BEGIN

delete from sinhvien where masv in (Select masv from diem, hocphan where diem.mahp=hocphan.mahp

group by masv having sum(diem*sotc)/sum(sotc)<2)

END

10. Tăng số đơn vị học trình của những học phần thuộc học kỳ 2 lên 1 đơn vị học trình, giảm đơn vị học trình của những học phần thuộc học kỳ 1 đi 1 đơn vị học trình.

Create PROCEDURE sp_e1_t1_y10

AS

BEGIN

update hocphan

set sotc=

CASE

WHEN hocky=2 then sotc+1

WHEN hocky=1 then sotc-1

ELSE sotc

END

END

Câu 4: Xây dựng hàm 1. Xây dựng một hàm xét loại học lực cho mỗi sinh viên. Biết rằng nếu điểm trung

bình (DTBHK)  8.4 thì xếp loại giỏi, 7.0  DTBHK < 8.4 thì xếp loại khá, 5.0 

DTBHK < 6.9 thì xếp loại trung bình, ngược lại xếp loại yếu. Sau đó, sử dụng hàm này

xây dựng một hàm trả về một bảng gồm các thông tin: mã sinh viên, họ tên, ngày sinh, điểm trung bình, xếp loại học lực của từng kỳ. - Xây dựng hàm xếp loại học lực CREATE FUNCTION sf_xeploaiHL(@dtb float) RETURNS nvarchar(20) AS BEGin declare @kq nvarchar(20)

272

Tập bài giảng SQL Server

If @dtb>=8.4 SELECT @kq='Giỏi' else If @dtb>=7 SELECT @kq='Khá'

else If @dtb>=5 SELECT @kq='Trung bình'

else SELECT @kq='Yếu‟

RETURN @kq END - Xây dựng đưa ra thông tin sinh viên sử dụng hàm xếp loại học lực CREATE FUNCTION If_E1_T4_Y1()

RETURNS TABLE

AS

RETURN

select sinhvien.masv, hoten, ns, hocky, (

sum(diem*sotc)/sum(sotc) as dtb,

dbo.sf_XeploaiHL(sum(diem*sotc)/sum(sotc)) as kq

from sinhvien inner join diem on sinhvien.masv=diem.masv

inner join hocphan on diem.mahp=hocphan.mahp

group by sinhvien.masv, hoten, ns, hocky

)

2. Xây dựng một hàm xét học bổng cho mỗi sinh viên của một học kỳ. Biết rằng nếu

điểm trung bình học kỳ (DTBHKHK)  9.0 thì được 240.000/tháng, 8.0  DTBHKHK

< 9 thì được 180.000/tháng, 7.0  DTBHKHK < 8 thì được 150.000/tháng. Sau đó sử

dụng hàm này xây dựng một hàm trả về một bảng gồm các thông tin: kỳ, mã sinh viên,

họ tên, ngày sinh, điểm trung bình, mức học bổng.

- Xây dựng hàm xét mức học bổng

CREATE FUNCTION sf_hocbong(@dtb float)

RETURNS int AS

BEGin declare @mhb int If @dtb>=9 SELECT @mhb=240000 else If @dtb>=8 SELECT @mhb=180000 else If @dtb>=7 SELECT @mhb=150000

else SELECT @mhb=0 RETURN @mhb END

273

Tập bài giảng SQL Server - Xây dựng đưa ra thông tin sinh viên sử dụng hàm xét mức học bổng CREATE FUNCTION If_E1_T4_Y2()

RETURNS TABLE

AS

RETURN ( select sinhvien.masv, hoten, ns, hocky, sum(diem*sotc)/sum(sotc) as dtb,

dbo.sf_hocbong(sum(diem*sotc)/sum(sotc)) as hb

from sinhvien inner join diem on sinhvien.masv=diem.masv

inner join hocphan on diem.mahp=hocphan.mahp

group by sinhvien.masv, hoten, ns, hocky

)

3. Xây dựng một hàm trả về một bảng gồm các thông tin sau: mã lớp, số sinh viên,

điểm trung bình học phần có mã học phần là „PTTK‟ hoặc „CSDL‟.

CREATE FUNCTION If_E1_T4_Y3()

RETURNS TABLE

AS

RETURN

(

select malop, count(sinhvien.masv) as sosv, AVG(diem) as dtb,

from sinhvien inner join diem on sinhvien.masv=diem.masv

where diem.mahp=‟PTTK‟ or diem.mahp= „CSDL‟

group by malop

)

4. Xây dựng một hàm trả về một bảng gồm các thông tin sau: mã lớp, mã sinh viên, họ

và tên, ngày sinh, điểm trung bình của mỗi học kỳ, của mỗi sinh viên mà có điểm trung bình lớn nhất với học kỳ cho trước. - Tạo hàm trung gian đưa ra các thông tin gồm: mã lớp, mã sinh viên, họ và tên, ngày

sinh, điểm trung bình của mỗi học kỳ, của mỗi sinh viên

CREATE FUNCTION If_E1_T4_Y4_TG() RETURNS TABLE

AS

RETURN (

select sinhvien.masv, hoten, ns, hocky, malop,

274

Tập bài giảng SQL Server

sum(diem*sotc)/sum(sotc) as dtb from sinhvien inner join diem on sinhvien.masv=diem.masv

inner join hocphan on diem.mahp=hocphan.mahp

group by sinhvien.masv, hoten, ns, hocky, malop

) - Tạo hàm đưa ra các sinh viên có điểm lớn nhất với học kỳ cho trước CREATE FUNCTION tf_E1_T4_y4](@hk nvarchar(2) RETURNS @dtbln

TABLE

(

Masv nvarchar(10),

hoten nvarchar(40), ns date,

malop nvarchar(40),

dtb float

)

AS

BEGIN

declare @dtb_max float

set @dtb_max =

(select Max(dtb) from if_e1_t4_y4_TG() where

ltrim(rtrim(hocky))=ltrim(rtrim(@hk)))

insert into @dtbln(masv, hoten, ns, malop, dtb)

select masv, hoten, ns, malop, dtb from if_e1_t4_y4_TG()

where dtb= @dtb_max and ltrim(rtrim(hocky))=ltrim(rtrim(@hk))

RETURN

END

Câu 5: Viết các Trigger 1. Tạo Trigger cho bảng sinh viên - Tạo Trigger cho hành động thêm bản ghi mới CREATE TRIGGER Trigger_Insert_SV

ON Sinhvien

for INSERT AS

BEGIN

275

Tập bài giảng SQL Server

declare @kt bit declare @masv nvarchar(15)

declare @hoten nvarchar(15)

declare @ns date

declare @gt nvarchar(3) declare @dc nvarchar(50) declare @mal nvarchar(15) set @kt=1

set @masv = (select masv from inserted)

set @hoten = (select hoten from inserted)

set @gt = (select gt from inserted)

set @ns = (select ns from inserted) set @dc = (select diachi from inserted)

set @mal = (select malop from inserted)

if (select count(*)from sinhvien where masv=@masv)>1

begin

set @kt=0

raiserror('Số báo danh đã tồn tại trong bảng thí sinh',16,6)

end

if len(@hoten)=0

begin

set @kt=0

raiserror('Họ tên không hợp lệ',16,6)

end if len(@mal)=0

begin

set @kt=0 raiserror('Mã lớp không hợp lệ',16,6) end

if len(@dc)=0

begin set @kt=0

raiserror('Địa chỉ không hợp lệ',16,6)

end if @ns>Getdate()

begin

276

Tập bài giảng SQL Server

set @kt=0 raiserror('Ngày sinh không hợp lệ',16,6)

end

if @kt=0

begin rollback tran raiserror('Không thêm được thông tin vào bảng sinh viên',16,6) end

else

begin

raiserror('Đã thêm được thông tin vào bảng sinh viên',16,6)

end

END

- Tạo Trigger cho hành động xóa bản ghi

CREATE TRIGGER Trigger_Delete_SV

ON Sinhvien

AFter DELETE

AS

BEGIN

declare @masv nvarchar(15)

set @masv = (select masv from deleted)

if ltrim(rtrim(@masv)) not in

(select ltrim(rtrim(sinhvien.masv))from sinhvien inner join diem on

sinhvien.masv=diem.masv inner join hocphan on diem.mahp=hocphan.mahp group by sinhvien.masv having sum(diem*sotc)/sum(sotc)<6)

begin

rollback raiserror('Không xóa được sinh viên này',16,6)

end

END

- Tạo Trigger cho hành động cập nhật

CREATE TRIGGER Trigger_Update_SV

ON Sinhvien

for UPDATE AS

BEGIN

277

Tập bài giảng SQL Server

declare @masv_cu nvarchar(15) declare @masv_moi nvarchar(15)

if update(masv)

begin

select @masv_cu =(select masv from deleted) select @masv_moi =(select masv from inserted) update diem set masv=@masv_moi

where masv=@masv_cu

end

END

2. Tạo Trigger cho bảng học phần học

Tương tự ý 1

3. Tạo Trigger cho bảng điểm

a. Khi thêm mới một bản ghi thì kiểm tra tính hợp lệ của dữ liệu cần bổ

sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

b. Chỉ cho phép xóa 2 bản ghi trở xuống. c. Không cho phép cập nhật điểm thi lớn hơn 10 và nhỏ hơn 0.

- Tạo Trigger cho hành động cập nhật

CREATE TRIGGER Trigger_Insert_DIEM

ON DIEM

For INSERT

AS

BEGIN declare @kt bit

declare @diem float

set @kt=1 if not exists (select * from inserted, sinhvien where inserted.masv=sinhvien.masv)

begin

set @kt=0 raiserror('Mã sinh viên không tồn tại trong bảng sinh viên',16,6)

end

if not exists (select * from inserted, hocphan where inserted.mahp=hocphan.mahp)

begin

278

Tập bài giảng SQL Server

set @kt=0 raiserror('Mã học phần không tồn tại trong bảng học phần',16,6)

end

set @diem = (select diem from inserted)

if @diem<0 or @diem>10 begin set @kt=0 raiserror('Điểm không hợp lệ',16,6)

end

if @kt=0

begin

rollback tran raiserror('Không thêm được thông tin vào bảng điểm',16,6)

end

else

begin

raiserror('Đã thêm được thông tin vào bảng điểm',16,6)

end

END

- Tạo Trigger cho hành động xóa bản ghi

CREATE TRIGGER Trigger_Delete_DIEM

ON Diem

AFter DELETE

AS BEGIN

if (select Count(*) from deleted)>=2

begin rollback raiserror('Chỉ cho phép xóa 2 bản ghi trở xuống',16,6)

end

END

- Tạo Trigger cho hành động cập nhật

CREATE TRIGGER Trigger_Update_DIEM

ON DIEM for UPDATE

AS

279

Tập bài giảng SQL Server

BEGIN declare @diem

if update(diem)

begin

select @diem =(select diem from inserted) if @diem<0 or @diem>10 begin rollback

raiserror(„Không cho phép cập nhật điểm',16,6) end

end

END

Các câu còn lại sinh viên tự làm Bài số 2: Cho CSDL quản lý tuyển sinh (QLTS) gồm các bảng sau:

TS(SBD, Hoten, NS, GT, QQ, DT, DL, DH, SP): Chứa thông tin về các thí sinh

UT(MaUT, TenUT, DC): Chứa thông tin về các loại ưu tiên.

NH(MaN, TenN, SoCT): Chứa thông tin về ngành học.

Trong đó: SBD-Số báo danh, Hoten-Họ tên, NS-Ngày tháng năm sinh, GT-Giới

tính, QQ-Quê quán, DT-Điểm toán, DL-Điểm lý, DH-Điểm hoá, SP-Số phòng dự thi,

MaUT-Mã loại ưu tiên, TenUT-Tên loại ưu tiên, DC-Điểm cộng, MaN-Mã ngành,

TenN-Tên ngành, SoCT-Số chỉ tiêu sẽ lấy vào ngành.

Câu 1: Tạo lập cơ sở dữ liệu: 1. Tạo cơ sở dữ liệu với tên là QLTS. 2. Tạo các bảng dữ liệu 3. Thiết kế ràng buộc khóa chính, khóa ngoại, ràng buộc duy nhất, ràng buộc kiểm

tra, ràng buộc mặc định cho mỗi bảng dữ liệu.

4. Tạo Diagrams cho cơ sở dữ liệu 5. Tạo chỉ mục: liên cung, phi liên cung, không gian. 6. Nhập tối thiểu 10 bản ghi cho mỗi bảng (Nhập trực tiếp hoặc nhập từ file).

Câu 2: Tạo View thực hiện các công việc sau: 1. Đưa ra danh sách các thí sinh có giới tính là nữ quê “Thái Bình” đăng kí ngành

“Kinh tế doanh nghiệp” hoặc “Công nghệ thông tin”.

2. Đưa ra danh sách các thí sinh là nam quê “Hòa Bình” hoặc “Thanh Hoa” đăng kí

ngành “Dệt”.

3. Đưa ra danh sách các thí sinh đăng kí dự thi ngành “He thong thong tin” hoặc

“Cong nghe han” ở quê quán „Thái Bình‟.

280

Tập bài giảng SQL Server

4. Đưa ra các thông tin gồm SBD, họ tên, ngày sinh, tên ưu tiên, điểm toán, điểm lý, điểm hóa, điểm cộng, tổng điểm của những thí sinh đỗ quê “Hải Phòng” có tên là

“Minh” .

5. Đưa ra danh sách các thí sinh nữ đăng kí dự thi ngành “Tin hoc ung dung” thi tại

phòng với số 1 hoặc phòng số 2.

6. Đưa ra các thông tin gồm SBD, họ tên, ngày sinh, tên ngành, điểm toán, điểm lý, điểm hóa, điểm cộng, tổng điểm của những thí sinh hưởng loại ưu tiên “con thương binh” đỗ ngành “Ke toan”.

7. Đưa ra các thông tin gồm mã ngành, tên ngành, chỉ tiêu, số thí sinh đăng kí vào

ngành của những ngành có số thí sinh đăng kí dự thi nhỏ hơn 100.

8. Đưa ra danh sách các ngành không có thí sinh đăng kí dự thi. 9. Đưa ra các thông tin gồm quê quán, số thí sinh đỗ của những quê quán có số thí

sinh đỗ lớn hơn 3

10. Đưa ra các thông tin gồm phòng, số thí sinh đỗ của những phòng có số thí sinh đỗ

lớn hơn 2.

11. Đưa ra các thông tin gồm SBD, họ tên, tên ngành, tên ưu tiên, ngày sinh, điểm toán, điểm lý, điểm hóa, điểm cộng, tổng điểm của những thí sinh đạt điểm cao

nhất.

12. Đưa ra thông tin gồm mã ưu tiên, tên ưu tiên, điểm cộng, số thí sinh thuộc t?ng loại

ưu tiên của những loại ưu tiên có số thí sinh thuộc lớn hơn 2.

Biết rằng thí sinh đỗ là thí sinh có điểm toán + điểm lý + điểm hoá + điểm cộng 

15 và không có điểm nào nhỏ hơn 1.

Câu 3: Hãy viết các Stored Procedure để thực hiện các công việc sau: 1. Đưa ra danh sách gồm các thông tin gồm SDB, họ tên, ngày sinh, quê quán, giới tính, tên ngành của những thí sinh đăng kí dự thi ngành “Kế toán” hoặc “Công

nghệ thông tin”.

2. Đưa ra danh sách gồm các thông tin gồm SDB, họ tên, ngày sinh, quê quán, giới tính, tên ngành của những thí sinh đăng kí dự thi ngành “Kế toán” hoặc “Công

nghệ thông tin”, “Quản trị kinh doanh”, “Công nghệ kỹ thuật điện”.

3. Đưa ra danh sách các thí sinh có giới tính là nữ quê “Thái Bình” đăng kí ngành

“Quản trị kinh doanh” hoặc “Công nghệ thông tin”.

4. Đưa ra danh sách các thí sinh là nam quê “Hòa Bình” hoặc “Thanh Hóa” đăng kí

ngành “Dệt”.

5. Đưa ra danh sách các thí sinh đăng kí dự thi ngành “Hệ thống thông tin” hoặc

“Công nghệ hàn” ở quê quán với quê quán cho trước.

281

Tập bài giảng SQL Server 6. Đưa ra danh sách gồm các thông tin gồm SDB, họ tên, ngày sinh, quê quán, giới tính, điểm toán, điểm lý, điểm hoá, điểm cộng, tổng điểm, kết quả của các thí sinh. 7. Đưa ra các thông tin gồm SBD, họ tên, ngày sinh, tên ưu tiên, điểm toán, điểm lý, điểm hóa, điểm cộng, tổng điểm của những thí sinh đỗ quê “Hải Phòng” có tên là

“Minh”.

8. Đưa ra danh sách các thí sinh nữ đăng kí dự thi ngành “Hệ thống thông tin” thi tại

phòng với số 1 hoặc phòng số 2.

9. Đưa ra các thông tin gồm SBD, họ tên, ngày sinh, tên ngành, điểm toán, điểm lý, điểm hóa, điểm cộng, tổng điểm của những thí sinh hưởng loại ưu tiên “con thương

binh” đỗ ngành “Kế toán”.

10. Đưa ra các thông tin gồm mã ngành, tên ngành, chỉ tiêu, số thí sinh đăng kí vào

ngành của những ngành có số thí sinh đăng kí dự thi nhỏ hơn 100.

11. Đưa ra danh sách các ngành không có thí sinh đăng kí dự thi. 12. Đưa ra các thông tin gồm quê quán, số thí sinh đỗ của những quê quán có số thí

sinh đỗ lớn hơn 3.

13. Đưa ra các thông tin gồm phòng, số thí sinh đỗ của những phòng có số thí sinh đỗ

lớn hơn 2.

14. Đưa ra các thông tin gồm SBD, họ tên, tên ngành, tên ưu tiên, ngày sinh, điểm toán, điểm lý, điểm hóa, điểm cộng, tổng điểm của những thí sinh đạt điểm cao

nhất.

15. Đưa ra thông tin gồm mã ưu tiên, tên ưu tiên, điểm cộng, số thí sinh thuộc từng loại

ưu tiên của những loại ưu tiên có số thí sinh lớn hơn 2.

16. Đưa ra danh sách các thí sinh đạt thủ khoa (là thí sinh có tổng điểm cao nhất). 17. Đưa ra danh sách gồm mã ngành, tên ngành, số thí sinh dự thi, số thí sinh đỗ , số thí sinh trượt của mỗi ngành. Danh sách đưa ra sắp xếp theo chiều giảm dần của số

lượng thí sinh dự thi.

18. Thêm bản ghi cho bảng thí sinh (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ

liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu)

19. Thêm bản ghi cho bảng ưu tiên (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu), màu

mặc định là trắng.

20. Thêm bản ghi cho bảng ngành (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ

liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu)

21. Cập nhật điểm cộng của mỗi loại ưu tiên; biết rằng nếu tên ưu tiên có 2 kí tự đầu là

„KV‟ thì tăng lên 2 điểm, nếu tên ưu tiên là con liệt sĩ thì tăng lên 1 điểm.

22. Cập nhật chỉ tiêu cho mỗi ngành học; nếu chỉ tiêu cũ nhỏ hơn 500 thì tăng lên 20%,

282

Tập bài giảng SQL Server

nếu nhỏ hơn 100o thì tăng lên 5%.

Câu 4: Xây dựng hàm 1. Xây dựng một hàm xét tuyển (đỗ, trượt) cho mỗi thí sinh. 2. Xây dựng một hàm trả về một bảng gồm các thông tin SBD, họ tên, ngày sinh, tên ngành, điểm toán, điểm lý, điểm hóa, điểm cộng, tổng điểm, kết quả (đỗ, trượt). 3. Xây dựng một hàm trả về một bảng gồm các thông tin sau: mã ngành, tên ngành, số thí sinh dự thi, điểm trung bình môn toán, điểm trung bình môn lý, điểm trung bình môn hóa, tổng điểm trung bình của mỗi ngành.

4. Xây dựng một hàm trả về một bảng gồm các thông tin sau: SBD, họ tên, ngày sinh, tên ngành, điểm toán, điểm lý, điểm hóa, điểm cộng, tổng điểm của những thí sinh

tổng điểm lớn hơn tổng điểm nhỏ nhất và nhỏ hơn tổng điểm cao nhất.

Câu 5: Viết các Trigger 1. Tạo Trigger cho bảng thí sinh theo yêu cầu sau:

 Thêm mới một thí sinh thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không

trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Chỉ cho phép xóa 2 thí sinh.

 Không cho phép cập nhật số báo danh, kiểm tra tính hợp lệ của dữ liệu được cập

nhật.

2. Tạo Trigger cho bảng ưu tiên theo yêu cầu sau:

 Thêm mới một loại ưu tiên thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu, tên ưu tiên không được trùng

nhau .

 Chỉ cho phép xóa 5 ưu tiên trở xuống.

 Không cho phép cập nhật điểm cộng lớn hơn 10 và nhỏ hơn 0.

3. Tạo Trigger cho bảng ngành học theo yêu cầu sau:

 Khi thêm mới một ngành học thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu, tên ngành không được

trùng nhau .

 Chỉ cho phép xóa 5 ngành học trở xuống.

 Không cho phép cập nhật chỉ tiêu tuyển sinh lớn hơn 3000 và nhỏ hơn 0.

Câu 6: Các thao tác trên cơ sở dữ liệu 1. Thiết lập cấu hình dịch vụ của SQL Server. 2. Tạo file sao lưu cho cơ sở dữ liệu trên với tên là „QLD_Backup‟ thuộc loại full backup, Transaction log và differential backup, khôi phục dữ liệu từ file sao lưu đã tạo.

3. Tách bỏ cơ sở dữ liệu khỏi SQL Server.

283

Tập bài giảng SQL Server 4. Xuất file cơ sở dữ liệu sang dạng Text, Access, Excel, SQL Server. 5. Tạo lịch trình sao lưu tự động cho cơ sở dữ liệu.

Câu 7: Quản lý bảo mật và người dùng

1. Tạo người dùng đăng nhập bằng tài khoản SQL Server, bằng tài khoản của Window.

2. Gắn các nhóm quyền cho người dùng. 3. Gắn các vai trò cho người dùng. 4. Cấp quyền sử dụng select, update, insert, delete trên bảng cho người dùng. Bài số 3: Cho CSDL quản lý nhân sự (QLNS) gồm các bảng sau:

Hoso(MaNV, Hoten, GT, NS, DC, Ngayvn): Chứa thông tin về nhân viên.

Phong(MaP, TenP, VT): Chứa thông tin về phòng ban.

Luong(MaNV, MaP, HSL, HSPC, NgayLL): Chứa thông tin về lương.

Trong đó: MaNV-Mã nhân viên, Hoten-Họ tên, GT-Giới tính, NS-Ngày sinh, DC- Địa chỉ, Ngayvn-Ngày vào ngành, MaP-Mã phòng, TenP-Tên phòng, VT-Vị trí, HSL-

Hệ số lương, HSPC-Hệ số phụ cấp, NgayLL-Ngày lên lương lần cuối.

Câu 1: Tạo lập cơ sở dữ liệu: 1. Tạo cơ sở dữ liệu với tên là QLNS. 2. Tạo các bảng dữ liệu 3. Thiết kế ràng buộc khóa chính, khóa ngoại, ràng buộc duy nhất, ràng buộc kiểm

tra, ràng buộc mặc định cho mỗi bảng dữ liệu.

4. Tạo Diagrams cho cơ sở dữ liệu 5. Tạo chỉ mục: liên cung, phi liên cung, không gian. 6. Nhập tối thiểu 10 bản ghi cho mỗi bảng (Nhập trực tiếp hoặc nhập từ file).

Câu 2: Tạo View thực hiện các công việc sau: 1. Đưa ra các thông tin mã nhân viên, họ và tên nhân viên, địa chỉ của những nhân

viên nam quê “Ha Noi” vào ngành năm 1970.

2. Đưa ra danh sách nhân viên được xét tăng lương trong năm nay. 3. Đưa ra các thông tin mã nhân viên, họ và tên nhân viên, địaa chỉ của những nhân

viên nữ là việc tại phòng ‟Hanh chinh‟ hoặc „Dao tao‟.

4. Đưa ra các thông tin mã nhân viên, họ và tên nhân viên, tên phòng, số tiền được lĩnh của các nhân viên được lĩnh tiền nhiều nhất trong cơ quan. Danh sách đưa ra

sắp xếp theo chiều giảm dần của tuổi.

5. Đưa ra thông tin về lương gồm: hệ số lương, số người, tổng số tiền được lĩnh hàng

tháng của mỗi hệ số lương có số người nhỏ hơn 2.

6. Đưa ra thông tin về lương gồm: tên phòng, số người, tổng số tiền được lĩnh hàng

tháng của mỗi phòng có tổng số tiền được lĩnh lớn hơn 15 triệu.

284

Tập bài giảng SQL Server

7. Đưa ra các thông tin mã nhân viên, họ và tên nhân viên, tên phòng, số tiền được lĩnh của các nhân viên có số tiền được lĩnh lớn hơn số tiền được lĩnh trung bình của

một người trong cơ quan.

Biết rằng tiêu chuẩn về hưu là nam có tuổi 60 trở lên, nữ có số tuổi từ 55 trở lên;

tiêu chuẩn được xét thưởng là người có 25 năm công tác trở lên; tiêu chuẩn được xét tăng lương là cứ 3 năm tăng lương 1 lần kể từ năm lên lương lần cuối; số tiền được lĩnh = (Hệ số lương + hệ số phụ cấp)* 830.

Câu 3: Hãy viết các Stored Procedure để thực hiện các công việc sau: 1. Đưa ra bảng lương của cơ quan gồm mã nhân viên, họ và tên nhân viên, tên phòng, số tiền được lĩnh của các nhân viên theo hệ số lương có hệ số lương cho

trước. Danh sách đưa ra sắp xếp theo chiều giảm dần của số tiền được lĩnh.

2. Đưa ra bảng lương của cơ quan gồm mã nhân viên, họ và tên nhân viên, tên phòng, số tiền được lĩnh của các nhân viên theo phòng có tên phòng cho trước.

Danh sách đưa ra sắp xếp theo chiều giảm dần của số tiền được lĩnh.

3. Thêm bản ghi cho bảng hoso (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ

liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu).

4. Thêm bản ghi cho bảng luong (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu), hệ số

lương mặc định là 2,34.

5. Thêm bản ghi cho bảng phong (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ

liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu)

6. Cập nhật hệ số lương và ngày lên lương lần cuối của các nhân viên đến hạn tăng lương; biết rằng cứ 3 năm thì tăng lương một lần kể từ lần tăng lương lần cuối và

mỗi lần tăng lên 0,33.

7. Cập nhật hệ số phụ cấp của các nhân viên. Biết rằng những nhân viên thuộc phòng đào tạo thì tăng lên 0.2, các nhân viên thuộc phòng hành chính thì tăng lên 0.1.

8. Xóa các nhân viên đã quá tuổi nghỉ hưu. 9. Đưa ra thông tin về lương gồm: mã phòng, tên phòng, số người có hệ số lương lớn hơn 3.0, số người có hệ số lương nhỏ hơn 3.0 của mỗi phòng với tên phòng cho

trước.

Câu 4: Xây dựng hàm 1. Xây dựng một hàm trả về một bảng gồm các thông tin sau: mã phòng, tên phòng,

số nhân viên, tổng số tiền được lĩnh hàng tháng.

2. Xây dựng một hàm trả về một bảng gồm các thông tin: mã phòng, hệ số lương, số người hưởng hệ số lương của mỗi phòng, của mỗi hệ số lương mà có số người

được hưởng lớn nhất hoặc nhỏ nhất.

285

Tập bài giảng SQL Server

3. Viết hàm để xét những khách hàng được xét thưởng. Sau đó sử dụng hàm này để xây dựng một hàm trả về một bảng gồm các thông tin sau: Mã nhân viên, họ tên,

tên phòng, kết quả (được mời thì ghi là mời, không được mời thì để trống).

4. Viết hàm để xét những nhân viên được nghỉ hưu trong năm nay. Sau đó sử dụng hàm này để xây dựng một hàm trả về một bảng gồm các thông tin sau: Mã nhân viên, họ tên, tên phòng, kết quả (được nghỉ thì ghi là nghỉ, không được nghỉ thì để trống).

Câu 5: Viết các Trigger: 1. Tạo Trigger cho bảng hoso theo yêu cầu sau:

 Khi thêm mới một nhân viên thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung,

không trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Chỉ cho phép xóa những nhân viên đã quá tuổi nghỉ hưu.

 Khi cập nhật mã nhân viên thì mã nhân viên trong bảng lương cũng được cập

nhật theo.

2. Tạo Trigger cho bảng luong theo yêu cầu sau:

 Khi thêm một một bản ghi thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung,

không trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Chỉ cho phép xóa 3 bản ghi trở xuống.

 Không cho phép cập nhật hệ số lương lớn hơn 10 hoặc nhỏ hơn 0.

3. Tạo Trigger cho bảng phòng theo yêu cầu sau:

 Khi thêm mới một bản ghi kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không

trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Chỉ cho phép xóa những phòng mà chưa có nhân viên nào.

 Không cho phép cập nhật mã phòng.

Câu 6: Các thao tác trên cơ sở dữ liệu

1. Thiết lập cấu hình dịch vụ của SQL Server.

2. Tạo file sao lưu cho cơ sở dữ liệu trên với tên là „QLD_Backup‟ thuộc loại full backup, Transaction log và differential backup, khôi phục dữ liệu từ file sao lưu đã tạo.

3. Tách bỏ cơ sở dữ liệu khỏi SQL Server. 4. Xuất file cơ sở dữ liệu sang dạng Text, Access, Excel, SQL Server. 5. Tạo lịch trình sao lưu tự động cho cơ sở dữ liệu. Câu 7: Quản lý bảo mật và người dùng 1. Tạo người dùng đăng nhập bằng tài khoản SQL Server, bằng tài khoản của Window. 2. Gắn các nhóm quyền cho người dùng.

3. Gắn các vai trò cho người dùng.

286

Tập bài giảng SQL Server

4. Cấp quyền sử dụng select, update, insert, delete trên bảng cho người dùng.

Bài số 4: Cho CSDL quản lý mua bán hàng (QLMBH) gồm các bảng sau:

KH(MaKH, Hoten, GT, DC, DT): Chứa thông tin của các khách hàng.

MH(MaMH, TenMH, Mau, DVT): Chứa thông tin của các mặt hàng. MB(MaKH, MaMH, MB, NgayMB, SL, DG): Chứa thông tin về quá trình mua

bán hàng.

Trong đó: MaKH-Mã khách hàng, Hoten-Họ và tên khách hàng, GT-Giới tính,

DC-Địa chỉ, DT-Điện thoại, MaMH-Mã mặt hàng, TenMH-Tên mặt hàng, Mau-Màu

sắc, DVT-Đơn vị tính, MB-Khách hàng mua hay bán, NgayMB-Ngày khách hàng mua

hay bán, SL-Số lượng, DG-Đơn giá.

Câu 1: Tạo lập cơ sở dữ liệu: 1. Tạo cơ sở dữ liệu với tên là QLMBH. 2. Tạo các bảng dữ liệu 3. Thiết kế ràng buộc khóa chính, khóa ngoại, ràng buộc duy nhất, ràng buộc kiểm

tra, ràng buộc mặc định cho mỗi bảng dữ liệu.

4. Tạo Diagrams cho cơ sở dữ liệu 5. Tạo chỉ mục: liên cung, phi liên cung, không gian. 6. Nhập tối thiểu 10 bản ghi cho mỗi bảng (Nhập trực tiếp hoặc nhập từ file).

Câu 2: Tạo View thực hiện các công việc sau: 1. Đưa ra các thông tin gồm mã khách hàng, họ tên, giới tính của những khách hàng

đã bán mặt hàng màu „Xanh‟ với số lượng >100 trong năm 2005.

2. Đưa ra các thông tin gồm mã khách hàng, họ tên, giới tính của những khách hàng có địa chỉ „Nam Dinh‟ hoặc „Ha Noi‟ đã mua mặt hàng có đơn giá lớn hơn 200. 3. Đưa ra thông tin của các khách hàng quê „Hà Giang‟, „Bắc Giang‟, „Kiên Giang‟,

„Quảng Ninh‟, „Quảng Bình‟, „Quảng Nam‟,‟Quảng Trị‟,‟Quảng Ngãi‟.

4. Đưa ra các thông tin gồm mã khách hàng, tên khách hàng, địa chỉ, điện thoại của những khách hàng đã mua mặt hàng màu “Vang” hoặc “Xanh” trong quý 2 năm 2006.

5. Đưa ra các thông tin gồm: mã khách hàng, tên khách hàng, mã mặt hàng, tên mặt hàng, số lượng, đơn giá, số tiền của khách hàng đã bán một mặt hàng trong một lần có mã mặt hàng là „MH001‟ hoặc „MH002‟.

6. Đưa ra các thông tin của các khách hàng có tên là „Vuong‟ chưa mua hàng lần nào. 7. Đưa ra danh sách các khách hàng không bán hàng lần nào trong năm 2006. 8. Đưa ra danh sách các mặt hàng không được bán lần nào trong năm 2006. 9. Đưa ra danh sách các mặt hàng đã được mua vào nhưng chưa bán ra bao giờ.

287

Tập bài giảng SQL Server 10. Đưa ra danh sách các mặt hàng mà khách hàng đã bán có đơn giá nhỏ hơn đơn giá

trung bình mỗi lần bán một mặt hàng.

11. Đưa ra danh sách các khách đã mua hàng có số lần mua nhỏ hơn 5. Danh sách đưa

ra sắp xếp theo chiều giảm dần của số lần mua.

12. Đưa ra các thông tin gồm mã khách hàng, họ tên, địa chỉ, số lần mua và tổng số tiền đã mua hàng của các khách hàng có số lần mua nhỏ lớn nhất trong năm 2006. 13. Đưa ra các thông tin gồm mã mặt hàng, tên mặt hàng, số lần bán, tổng số lượng, tổng số tiền đã bán mặt hàng trong năm 2005 và có tổng số lượng mỗi lần bán một

mặt hàng > 25.

14. Đưa ra thông tin các khách hàng vừa mua mặt hàng màu đỏ và vừa bán mặt hàng

màu xanh trong năm 2012.

15. Đưa ra thông tin về các khách hàng đã mua hàng có số lần mua hàng lớn nhất hoặc

nhỏ nhất.

Câu 3: Hãy viết các Stored Procedure để thực hiện các công việc sau: 1. Đưa ra các thông tin gồm: Mã khách hàng, họ tên, địa chỉ, giới tính (Ghi rõ Nam,

Nữ), điện thoại của các khách hàng với địa chỉ cho trước.

2. Đưa ra các thông tin gồm: Mã khách hàng, họ tên, địa chỉ, điện thoại, mã mặt hàng,

số lượng, đơn giá, số tiền của các khách hàng đã mua hàng.

3. Đưa ra các thông tin gồm: Mã khách hàng, họ tên, địa chỉ, điện thoại, mã mặt hàng, tên mặt hàng, số lượng, đơn giá, số tiền của các khách hàng đã bán hàng hàng trong

một ngày với ngày bán cho trước.

4. Đưa ra các thông tin gồm: Mã khách hàng, họ tên, địa chỉ, điện thoại, mã mặt hàng, tên mặt hàng, số lượng, đơn giá, số tiền của các khách hàng đã bán hàng với số tiền

nhiều nhất hoặc nhỏ nhất.

5. Đưa ra các thông tin gồm: Mã mặt hàng, tên mặt hàng, mã khách hàng, số lượng, đơn giá, số tiền của các mặt hàng đã được mua với đơn giá lớn hơn hoặc nhỏ hơn

đơn giá trung bình.

6. Đưa ra các thông tin gồm: Mã mặt hàng, số lần bán, tổng số lượng bán của mỗi mặt

hàng có tổng số lượng bán lớn hơn tổng số lượng bán cho trước.

7. Xóa bản ghi từ bảng mua bán khi biết mã khách hàng và mã mặt hàng. 8. Xóa bản ghi từ bảng khách hàng khi biết mã khách hàng. 9. Khi lựa chọn bằng 1 thì xóa bản ghi từ bảng mặt hàng, mua bán khi biết mã mặt hàng; khi lựa chọn bằng 2 thì xóa bản ghi từ bảng mặt khách hàng, mua bán khi

biết mã khách hàng.

10. Xoá những bản ghi trong bảng mua bán mà có ngày mua bán trước năm 2005. 11. Xoá khỏi bảng mặt hàng những mặt hàng chưa tham gia mua bán.

288

Tập bài giảng SQL Server

12. Xoá khỏi bảng khách hàng những khách hàng hiện không có bất kỳ một giao dịch

nào.

13. Xoá khỏi bảng MATHANG những mặt hàng có số lượng tồn kho bằng 0. 14. Cập nhật đơn giá của những mặt hàng đã được khách hàng mua; biết rằng nếu đơn giá nhỏ hơn 10 thì tăng đơn giá lên 10%, nếu đơn giá lớn hơn hoặc bằng 10 và nhỏ hơn 20 thì tăng 15%, ngược lại thì tăng 20%.

15. Cập nhật đơn giá của những mặt hàng đã được khách hàng bán; biết rằng nếu đơn giá hơn đơn giá trung bình của mỗi lần bán thì giảm đơn giá đi lên 15%, ngược lại

thì tăng 20%.

Câu 4: Xây dựng hàm 1. Xây dựng một hàm trả về một bảng gồm các thông tin sau: mã mặt hàng, tên mặt

hàng, số lần bán, tổng số lượng, tổng số tiền đã bán mặt hàng.

2. Xây dựng một hàm trả về một bảng gồm các thông tin mã khách hàng, họ tên, địa chỉ, số lần mua và tổng số tiền đã mua hàng của các khách hàng có số lần mua nhỏ

lớn nhất hoặc nhỏ nhất.

3. Viết hàm để xét những khách hàng được mời tham dự ngày thành lập công ty. Biết rằng những khách hàng được mời tham dự ngày thành lập công ty là những khách

hàng số lần bán hàng lớn hơn 10 và tổng số tiền lớn hơn 100. Sau đó sử dụng hàm

này để xây dựng một hàm trả về một bảng gồm các thông tin sau: Mã khách hàng,

họ tên, địa chỉ, điện thoại, kết quả (được mời thì ghi là mời, không được mời thì để

trống)

4. Viết hàm để tính lượng hàng tồn kho của mỗi mặt hàng. Sau đó sử dụng hàm này để xây dựng một hàm trả về một bảng gồm các thông tin sau: mã mặt hàng, tên mặt

hàng, số lượng mua, số lượng bán, số lượng tồn kho.

5. Viết hàm để tính mức giảm giá cho khách hàng trong mỗi lần mua hàng. Biết rằng nếu số tiền mua hàng lớn hơn 200 thì giảm 2%, nếu số tiền mua hàng lớn hơn 300

thì giảm 5%. Sau đó sử dụng hàm này để xây dựng một hàm trả về một bảng gồm các thông tin sau: Mã khách hàng, họ tên, địa chỉ, điện thoại, mã mặt hàng, tên mặt hàng, số lượng, đơn giá, số tiền, số tiền được giảm, số tiền phải trả của mỗi khách

hàng đã mua hàng trong một lần.

Câu 5: Viết các Trigger: 2. Tạo Trigger cho bảng khách hàng theo yêu cầu sau:

 Thêm bản ghi cho bảng khách hàng thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu, tên khách hàng được thêm không được trống, số điện thoại không được trùng nhau .

+ Chỉ cho phép xóa một khách hàng.

289

Tập bài giảng SQL Server

 Không cho phép cập nhật mã khách hàng, giới tính. Tạo Trigger cho bảng mặt hàng theo yêu cầu sau: 3.

 Thêm bản ghi cho bảng mặt hàng hàng thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu, tên mặt hàng

không được trùng nhau, trường đơn vị tính chỉ có miền giá trị (kg, tan, lit, m2,

cai).

 Khi xóa một mặt hàng thì mặt hàng tương ứng trong bảng mua bán cũng bị xóa

theo.

 Không cho phép cập nhật mã mặt hàng.

4. Tạo Trigger cho bảng mua bán theo yêu cầu sau:

 Thêm bản ghi cho bảng mua bán thì kiểm tra tính hợp lệ của dữ liệu cần bổ

sung, đảm bảo toàn vẹn tham chiếu.

 Chỉ cho phép xóa 5 mặt hàng trở xuống.

 Khi cập nhật thông tin thì kiểm tra tính hợp lệ của dữ liệu, không có phép cập

nhật mã khách hàng, mã mặt hàng.

Câu 6: Các thao tác trên cơ sở dữ liệu

1. Thiết lập cấu hình dịch vụ của SQL Server.

2. Tạo file sao lưu cho cơ sở dữ liệu trên với tên là „QLD_Backup‟ thuộc loại full

backup, Transaction log và differential backup, khôi phục dữ liệu từ file sao lưu đã tạo.

3. Tách bỏ cơ sở dữ liệu khỏi SQL Server.

4. Xuất file cơ sở dữ liệu sang dạng Text, Access, Excel, SQL Server.

5. Tạo lịch trình sao lưu tự động cho cơ sở dữ liệu trên vào 23h hàng ngày

6. Tạo lịch trình sao lưu tự động cho cơ sở dữ liệu trên vào 17h sáng thứ 2 hàng tuần.

Câu 7: Quản lý bảo mật và người dùng

1. Tạo người dùng đăng nhập bằng tài khoản SQL Server, bằng tài khoản của Window. 2. Gắn các nhóm quyền cho người dùng. 3. Gắn các vai trò cho người dùng.

4. Cấp quyền sử dụng select, update, insert, delete trên bảng cho người dùng.

Bài số 5: Cho CSDL quản lý thư viện (QLTV) gồm các bảng sau:

DG(MaDG, Hoten, GT, NS, TD, DC, NCT): Chứa thông tin về các độc giả. Sach(MaS, TenS, TG, NXB, NamXB, Gia, SL): Chứa thông tin về các cuốn sách. Muontra(MaS, MaDG, NgayM, NgayHT, NgayT): Chứa thông tin về quá trình

mượn trả sách của độc giả.

Trong đó: MaDG-Mã độc giả, Hoten-Họ tên, GT-Giới tính, NS-Ngày sinh, TD- Trình độ, DC-Địa chỉ, NCT-Nơi công tác, MaS-Mã sách, TenS-Tên sách, TG-Tác giả,

290

Tập bài giảng SQL Server

NXB-Nhà xuất bản, NamXB-Năm xuất bản, Gia-Giá tiền, SL-Số lượng, NgayM-Ngày mượn, NgayT-Ngày trả, NgayHT-Ngày hẹn trả.

Câu 1: Tạo lập cơ sở dữ liệu: 1. Tạo cơ sở dữ liệu với tên là QLTV. 2. Tạo các bảng dữ liệu 3. Thiết kế ràng buộc khóa chính, khóa ngoại, ràng buộc duy nhất, ràng buộc kiểm

tra, ràng buộc mặc định cho mỗi bảng dữ liệu.

4. Tạo Diagrams cho cơ sở dữ liệu 5. Tạo chỉ mục: liên cung, phi liên cung, không gian. 6. Nhập tối thiểu 10 bản ghi cho mỗi bảng (Nhập trực tiếp hoặc nhập từ file).

Câu 2: Tạo View thực hiện các công việc sau: 1. Đưa ra các thông tin gồm mã sách, tên sách, họ tên tác giả, nhà xuất bản, giá tiền, mã độc giả, họ và tên độc giả, ngày mượn, ngày trả của những cuốn sách của nhà

xuất bản „Giao duc‟ hoặc „Thanh nien‟ xuất bản năm 2008. Danh sách đưa ra sắp

xếp theo chiều giảm dần của giá tiền.

2. Đưa ra các thông tin gồm mã độc giả, họ tên độc giả có trình độ „Cao dang‟ hoặc „Dai hoc‟ công tác tại „DH SPKND‟. Danh sách đưa ra sắp xếp theo chiều giảm

dần của tuổi.

3. Đưa ra các thông tin gồm mã độc giả, họ và tên độc giả, giới tính, nơi công tác của những độc giả đã mượn sách „Co so du lieu‟ hoặc „Phan tich thiet ke‟ quá hạn mà

chưa trả.

4. Đưa ra các thông tin gồm mã sách, tên sách, họ tên tác giả, nhà xuất bản, giá tiền, mã độc giả, họ và tên độc giả, ngày mượn, ngày trả của những cuốn sách xuất bản

năm 2008 hoặc 2007 của nhà xuất bản „Ki thuat‟. Danh sách đưa ra sắp xếp theo chiều giảm dần của giá tiền.

5. Đưa ra danh sách các độc giả chưa mượn sách của nhà xuất bản „Thanh nien‟ lần

nào.

6. Đưa ra danh sách các độc giả chưa mượn sách „Mang may tinh‟ lần nào. 7. Đưa ra danh sách các đầu sách chưa mượn độc giả công tác tại „CDSPND‟ mượn

lần nào.

8. Đưa ra danh sách các đầu sách chưa được độc giả có trình độ „Cao dang‟ mượn lần

nào.

9. Đưa ra các thông tin gồm mã độc giả, họ và tên độc giả, giới tính, ngày sinh, nơi

công tác, số lượt mượn sách của mỗi độc giả có số lượt mượn >2.

10. Đưa ra các thông tin gồm mã sách, tên sách, họ và tên tác giả, nhà xuất bản, số lượt

được mượn của mỗi đầu sách có số lượt mượn >2.

291

Tập bài giảng SQL Server 11. Đưa ra các thông tin gồm nhà xuất bản, số sách đã xuất bản mà có số sách đã xuất

bản nhỏ hơn 5.

12. Đưa ra các thông tin gồm họ tên tác giả, số đầu sách đã được xuất bản mà có số

đầu sách đã được xuất bản lơn hơn 3.

Câu 3: Hãy viết các Stored Procedure để thực hiện các công việc sau: 1. Đưa ra danh sách các đầu sách chưa được độc giả mượn lần nào với trình độ cho

trước.

2. Đưa ra các thông tin gồm mã độc giả, họ và tên độc giả, giới tính, ngày sinh, nơi

công tác, số lượt mượn sách của mỗi độc giả có số lượt cho trước.

3. Đưa ra các thông tin gồm mã sách, tên sách, họ và tên tác giả, nhà xuất bản, số lượt

được mượn của mỗi đầu sách với nhà xuất bản cho trước.

4. Thêm bản ghi cho bảng độc giả (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ

liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu).

5. Thêm bản ghi cho bảng sách (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu), màu

mặc định là trắng.

6. Thêm bản ghi cho bảng mượn trả (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu).

7. Xóa các đầu sách xuất bản trước năm 2000. 8. Tăng số lượng sách của mỗi cuốn sách lên x cuốn sách với x cho trước và mã sách

cho trước.

Câu 4: Xây dựng hàm 1. Xây dựng một hàm tính tiền mượn sách. Biết rằng nếu giá tiền mượn mỗi quyển

sách trong hạn là 1000 đồng/ ngày; nếu ngày mượn trùng với ngày trả thì tính là một ngày mượn; mỗi ngày mượn quá hạn thì tính thêm 500 đồng/ngày.

2. Xây dựng một hàm trả về một bảng gồm các thông tin: mã độc giả, họ và tên độc

giả, giới tính, ngày sinh, mã sách, tên sách, nhà xuất bản, giá tiền phải trả của mỗi cuốn sách. 3. Xây dựng một hàm trả về một bảng gồm các thông tin sau: mã độc giả, họ và tên

độc giả, giới tính, ngày sinh, số lượt mượn, tổng số tiền phải trả trong năm 2009.

4. Xây dựng một hàm trả về một bảng gồm các thông tin sau: mã độc giả, họ và tên độc giả, giới tính, ngày sinh, mã sách, tên sách, số lượt mượn của những độc giả đã

mượn các cuốn sách quá hạn mà chưa trả.

Câu 5: Viết các Trigger 1. Tạo Trigger cho bảng độc giả theo yêu cầu sau:

 Khi thêm mới một độc giả thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không

292

Tập bài giảng SQL Server

trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Chỉ cho phép xóa 2 độc giả trở xuống.

 Không cho phép cập nhật mã độc giả.

2. Tạo Trigger cho bảng sách theo yêu cầu sau:

 Khi thêm mới một đầu sách thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không

trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Khi xóa bản ghi ở bảng sách thì bản ghi tương ứng ở bảng mượn trả cũng bị xóa.

 Không cho phép cập nhật số lượng sách nhỏ hơn 0. Khi cập nhật mã sách thì mã

sách trong bảng mượn trả cũng được cập nhật theo.

3. Tạo Trigger cho bảng mượn trả theo yêu cầu sau:

 Khi thêm mới một bản ghi thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không

trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Chỉ cho phép xóa bản ghi mà có năm mượn trước năm 2004.

 Khi cập nhật kiểm tra tính hợp lệ giữa ngày mượn, ngày trả, ngày hẹn trả.

Câu 6: Các thao tác trên cơ sở dữ liệu

1. Thiết lập cấu hình dịch vụ của SQL Server.

2. Tạo file sao lưu cho cơ sở dữ liệu trên với tên là „QLD_Backup‟ thuộc loại full

backup, Transaction log và differential backup, khôi phục dữ liệu từ file sao lưu đã tạo.

3. Tách bỏ cơ sở dữ liệu khỏi SQL Server.

4. Xuất file cơ sở dữ liệu sang dạng Text, Access, Excel, SQL Server.

5. Tạo lịch trình sao lưu tự động cho cơ sở dữ liệu trên vào thứ 2 hàng tuần

6. Tạo lịch trình sao lưu tự động cho cơ sở dữ liệu trên vào tháng 2 hàng năm.

Câu 7: Quản lý bảo mật và người dùng

1. Tạo người dùng đăng nhập bằng tài khoản SQL Server, bằng tài khoản của Window.

2. Gắn các nhóm quyền cho người dùng.

3. Gắn các vai trò cho người dùng. 4. Cấp quyền sử dụng select, update, insert, delete trên bảng cho người dùng. Bài số 6: Cho CSDL nhập xuất hàng (QLXNH) gồm các bảng sau:

Nhap(Mamh, TenMH, SLN, DGN, NGN): Chứa thông tin về các mặt hàng được

nhập.

Xuat(Mamh, TenMH, SLX, DGX,NGX): Chứa thông tin về các mặt hàng được

xuất.

TonK(Mamh, TenMH, SLTK): Chứa thông tin về các mặt hàng tồn kho. Trong đó: Mamh-Mã mặt hàng, TenMH-Tên mặt hàng, SLN-Số lượng nhập,

DGN-Đơn giá nhập, SLX-Số lượng xuất, DGX-Đơn giá xuất, SLTK-Số lượng tồn

kho, NGN-Ngày nhập hàng, NGX-Ngày xuất hàng.

293

Tập bài giảng SQL Server Câu 1: Tạo lập cơ sở dữ liệu: 1. Tạo cơ sở dữ liệu với tên là QLXNH. 2. Tạo các bảng dữ liệu 3. Thiết kế ràng buộc khóa chính, khóa ngoại, ràng buộc duy nhất, ràng buộc kiểm tra,

ràng buộc mặc định cho mỗi bảng dữ liệu.

4. Tạo Diagrams cho cơ sở dữ liệu 5. Tạo chỉ mục: liên cung, phi liên cung, không gian. 6. Nhập tối thiểu 10 bản ghi cho mỗi bảng (Nhập trực tiếp hoặc nhập từ file).

Câu 2: Tạo View thực hiện các công việc sau: 1. Đưa ra các thông tin gồm mã mặt hàng, tên mặt hàng, đơn giá nhập của các mặt hàng được nhập trong năm 2012. Danh sách đưa ra sắp xếp theo chiều giảm dần của

đơn giá nhập.

2. Đưa ra danh sách các mặt hàng chưa được xuất bao giờ. 3. Đưa ra danh sách các mặt hàng tồn kho.

Câu 3: Hãy viết các Stored Procedure để thực hiện các công việc sau: 1. Đưa ra danh sách các mặt hàng được nhập trong năm 2011 hoặc 2012. 2. Đưa ra danh sách các mặt hàng tồn kho. 3. Đưa ra các mặt hàng được xuất trong một năm với năm cho trước. 4. Đưa ra các mặt hàng tồn kho trong một quý của một năm với quý và năm cho trước. 5. Thêm bản ghi cho bảng nhập (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ liệu

cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu).

6. Thêm bản ghi cho bảng xuất (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu), màu mặc

định là trắng.

7. Thêm bản ghi cho bảng tồn kho (thủ tục phải thực hiện kiểm tra tính hợp lệ của dữ

liệu cần bổ sung, không trùng khoá chính và đảm bảo toàn vẹn tham chiếu).

8. Xóa các mặt hàng tồn kho trong năm 2012. 9. Tăng số lượng nhập của mỗi mặt hàng lên x với x cho trước và mã mặt hàng cho

trước.

Câu 4: Xây dựng hàm 1. Xây dựng một hàm trả về một bảng gồm các thông tin: mã mặt hàng, tên mặt hàng, số lượng nhập, số lượng xuất, số lượng tồn kho.

2. Xây dựng một hàm trả về một bảng gồm các thông tin sau: mã mặt hàng, tên mặt

hàng của những mặt hàng chưa được xuất bao giờ.

Câu 5: Viết các Trigger 1. Tạo Trigger cho nhập theo yêu cầu sau:

294

Tập bài giảng SQL Server

 Khi thêm mới một mặt hàng thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không

trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Khi xóa mặt hàng nhập thì mặt hàng này trong bảng xuất và bảng tồn kho cũng bị

xóa theo.

 Không cho phép cập nhật mã mặt hàng. 2. Tạo Trigger cho bảng xuất theo yêu cầu sau:

 Khi thêm mới mặt hàng xuất thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung,

không trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Khi xóa bản ghi ở bảng xuất thì bản ghi tương ứng ở bảng tồn kho cũng bị thay đổi.

3. Tạo Trigger cho bảng tồn kho theo yêu cầu sau:

 Khi thêm mới một bản ghi thì kiểm tra tính hợp lệ của dữ liệu cần bổ sung, không

trùng khoá chính và đảm bảo toàn vẹn tham chiếu.

 Khi cập nhật số lượng tồn kho thì phải kiểm tra tính hợp lệ giữa số lượng nhập và

số lượng xuất.

Câu 6: Các thao tác trên cơ sở dữ liệu

1. Thiết lập cấu hình dịch vụ của SQL Server.

2. Tạo file sao lưu cho cơ sở dữ liệu trên với tên là „QLD_Backup‟ thuộc loại full

backup, Transaction log và differential backup, khôi phục dữ liệu từ file sao lưu đã tạo.

3. Tách bỏ cơ sở dữ liệu khỏi SQL Server.

4. Xuất file cơ sở dữ liệu sang dạng Text, Access, Excel, SQL Server.

5. Tạo lịch trình sao lưu tự động cho cơ sở dữ liệu trên vào 20 hàng tháng

6. Tạo lịch trình sao lưu tự động cho cơ sở dữ liệu trên vào 21h thứ 5 hàng tuần.

Câu 7: Quản lý bảo mật và người dùng

1. Tạo người dùng đăng nhập bằng tài khoản SQL Server, bằng tài khoản của Window.

2. Gắn các nhóm quyền cho người dùng. 3. Gắn các vai trò cho người dùng. 4. Cấp quyền sử dụng select, update, insert, delete trên bảng cho người dùng.

Bài số 7: Hãy lựa chọn một phương án tốt nhất cho các câu trả lời.

1. Thành phần nào dưới đây được dùng để quản trị các quyền hạn trên các cơ sở

dữ liệu và các đối tượng cơ sở dữ liệu?

a. DML b. Sub-schema DDL c. DCL d. DDL

2. QLD là loại cơ sở dữ liệu nào?

a. Cơ sở dữ liệu người dùng định nghĩa b. Cơ sở dữ liệu mẫu c. Cơ sở dữ liệu hệ thống

295

Tập bài giảng SQL Server 3. "Quy tắc toàn vẹn thực thể khẳng định rằng không thành phần nào của khoá chính của bảng gốc (base table) được nhận giá trị null". Khẳng định này có đúng không?

a. Đúng. Bởi vì nếu khoá chính nhận giá trị NULL thì các dòng sẽ không còn là

duy nhất nữa.

b. Không. Khoá chính có thể nhận giá trị NULL nhưng không đượcnhận giá trị 0. c. Không phải hai đáp án trên.

4. Mệnh đề 1: Khi có một cột là khoá ngoại trong một bảng thì phải có một cột ở bảng khác là khoá chính hoặc khoá duy nhất. Mệnh đề 2: Hai cột được nối với nhau dùng

mối quan hệ khoá ngoại phải có một định nghĩa xác định.

a. Chỉ có mệnh đề 2 là đúng b. Cả hai mệnh đề đúng

c. Cả hai mệnh đề đều sai d. Chỉ có mệnh đề 1 là đúng

5. Mệnh đề nào dưới đây là sai khi đề cập tới khái niệm toàn vẹn tham chiếu và khoá

ngoại?

a. Một cơ sở dữ liệu không được chứa nhiều hơn một giá trị khoá ngoại không

khớp nhau.

b. Các giá trị khoá ngoại phải có sự tương ứng (khớp) với các giá trị khoá chính.

c. Các giá trị mới không được phép ghi vào khoá ngoại trước.

d. Không mệnh đề nào sai cả

6. Trong số các phiên bản sau đây, phiên bản nào phục vụ cho việc quản trị và phân

tích dữ liệu phù hợp cho các doanh nghiệp, tổ chức vừa và nhỏ?

a. SQL Server 2008 Enterprise Edition b. SQL Server 2008 Standard Edition

c. SQL Server 2008 Developer Edition d. SQL Server 2008 Desktop Edition

7. Nếu SQL Server dùng phương pháp xác thực Windows Authentication, ta phải cung cấp cho hệ thống một mã đăng nhập (login ID) mỗi khi truy cập vào SQL Server.

a. Đúng

b. Sai 8. Mệnh đề nào dưới đây là SAI khi đề cập tới Transact-SQL?

a. Transact-SQL cho phép khai báo các biến cục bộ và hằng số trong các đối tượng Transact-SQL. b. Transact-SQL là một sản phẩm độc lập.

c. Có thể dùng Transact-SQL để viết các ứng dụng một cách trực tiếp.

d. Transact-SQL là công cụ cho phép lập trình các chức năng trong cơ sở dữ liệu quan hệ.

9. Master là loại cơ sở dữ liệu nào?

a. Cơ sở dữ liệu người dùng định nghĩa b. Cơ sở dữ liệu mẫu

c. Cơ sở dữ liệu hệ thống

296

Tập bài giảng SQL Server

10. Hai giá trị NULL có bằng nhau không?

a. Có b. Không

11. Đâu là các công cụ để thực hiện Toàn vẹn miền (Domain Integrity) trong SQL

Server 2008?

a. Định nghĩa DEFAULT. b. Ràng buộc khoá chính (PRIMARY key constraint) c. Ràng buộc khoá ngoại (FOREIGN key constraint) d. Ràng buộc kiểm tra (CHECK constraint)

e. Thuộc tính NOT NULL

f. Ràng buộc duy nhất (UNIQUE CONSTRAINT)

12. Đoạn chương trình sau đây trả về giá trị nào?

Create procedure sp_TestOutput @a int, @b int, @c int

as

select @c = @a + @b

Thực thi thủ tục:

Declare @tong int

set @tong = 0

sp_TestOutput 100, 200, @tong

select @tong

a. 0 b. 300

13. Câu lệnh nào dùng để gán giá trị cho biến? a. Declare @diem b. Declare @kq

c. select @diem=10 d. Declare @diem

14. Đặc tính nào dưới đây cho phép giới hạn các giá trị nhập vào một cột trong bảng?

a. Toàn vẹn thực thể (Entity integrity)

b. Toàn vẹn miền (Domain integrity) c. Toàn vẹn do người dùng định nghĩa (User-defined integrity) d. Toàn vẹn tham chiếu (Ređerential integrity)

15. Các quy tắc (Rule), thủ tục (Stored Procedure) và các Triggers là các công cụ để

đảm bảo toàn vẹn_______________. a. Thực thể b. Miền

c. Do người dùng định nghĩa (User-defined ) d. Tham chiếu

16. Mệnh đề 1: Nếu có một lựa chọn từ một khoá chính hơn và một khoá tổ hợp để làm một khoá chính cho bảng, ta nên chọn khoá chính đơn(simple primary key).

Mệnh đề 2: Thao tác với một cột hơn luôn nhanh hơn là thao tác với nhiều cột.

297

Tập bài giảng SQL Server

a. Cả hai mệnh đề đều đúng và mệnh đề 2 là lý do để phát biểu mệnh đề 1. b. Cả hai mệnh đề đều đúng nhưng mệnh đề 2 không phai là nguyên nhân để giải

thích mệnh đề 1.

c. Chỉ mệnh đề 2 là đúng d. Cả hai mệnh đề đều sai

17. Một ràng buộc khoá chính không được xoá đi nếu nó được tham chiếu bởi một ràng buộc khoá ngoại trong một bảng khác; ta phải xoá ràng buộc khoá ngoại trước.

a. Đúng b. Sai

18. Mệnh đề nào dưới đây là ĐÚNG khi đề cập tới ràng buộc duy nhất (UNIQUE

constraint)?

a. Ràng buộc duy nhất được dùng khi muốn áp đặt tính duy nhất cho một cột

không phải là Khoá chính .

b. Chỉ có ràng buộc duy nhất có thể được định nghĩa trong một bảng. c. Ràng buộc duy nhất có thể được tham chiếu bởi một ràng buộc khoá ngoại .

d. Ràng buộc khoá chính có thể được định nghĩa trên các cột có chứa giá trị null. 19. Nhóm quyền nào sau đây cho phép dùng hay kết thúc đối tượng SQL Server 2008

đang chạy.

a. SysAdmin b.ServerAdmin

c. ProcessAdmin d. SetupAdmin

a. 2 d. 5 c. 4 b.3

20. SQL Server cung cấp mấy chế độ xác thực là chế độ xác thực. 21. Mệnh đề 1: Khoá ngoại có thể được nối với duy nhất một cột có ràngbuộc Khoá chính ở bảng khác. Mệnh đề 2: Ràng buộc khoá ngoại có thể được định nghĩa để

liên kết với một ràng buộc duy nhất (UNIQUE constraint) ở bảng khác.

b. Chỉ mệnh đề 2 là đùng

a. Chỉ mệnh đề 1 là đúng c. Cả hai mệnh đề đều đúng d. Cả hai mệnh đề đều sai

22. Khi thêm một ràng buộc CHECK vào bảng, ràng buộc CHECK này sẽ được áp

dụng cho cả các dữ liệu cũ và mới. a. Đúng b. Sai

23. Mệnh đề 1: Inner Join loại bỏ các dòng không khớp nhau từ các bảng thành phần. Mệnh đề 2: Outer Join trả về tất cả các dòng từ ít nhất một trong số các bảng được

liệt kê trong mệnh đề FROM miễn là các dòng này thoả mãn điều kiện của mệnh đề WHERE hoặc HAVING.

a. Chỉ mệnh đề 1 là đúng b. Chỉ mệnh đề 2 là đúng

c. Cả hai mệnh đề đều đúng d. Cả hai mệnh đề đều sai

24. Câu lệnh nào sau đây thuộc loại ngôn ngữ DCL? b. Câu lệnh DENY a. Câu lệnh CREATE

298

Tập bài giảng SQL Server

c. Câu lệnh INSERT d. Câu lệnh UPDATE

25. AdventureWorks là loại cơ sở dữ liệu nào? a. Cơ sở dữ liệu người dùng định nghĩa

b. Cơ sở dữ liệu mẫu

c. Cơ sở dữ liệu hệ thống

26. Đâu là biến cục bộ? a. @@ERROR c. @@CPU_BUSY b. @@IDENTITY d. @@CURSOR_ROWS

27. Câu lệnh nào dùng để khai báo biến? a. Declare @diem b. set @diem=10

c. select @diem=10 d. set @kq=1

28. Điều gì sẽ xảy ra nếu như có các bản ghi tham chiếu tới các bản ghi đang bị xoá

đi?

a. Không thể xoá thành công

b. Các bản ghi trong bảng hiện thời sẽ bị xoá đi.

c. Các bản ghi trong bảng hiện thời và các bảng ghi liên quan tới nó sẽ bị xoá đi.

29. Đoạn chương trình sau đây trả về giá trị nào? CREATE PROCEDURE sp_TestOutput1

@a int, @b int, @c int output

AS

BEGIN

select @c = @a + @b

END

GO Declare @tong int

set @tong = 0

exec sp_TestOutput1 100, 200, @tong output select @tong a. 0 b. 300

30. Dùng câu lệnh nào để xoá tất cả các dòng trong một bảng?

b. DELETE ROWS

a. DROP table c. DELETE TABLE d. TRUNCATE TABLE

31. Câu lệnh Create Table thuộc loại câu lệnh nào trong số các câu lệnh SQL dưới

đây? a. DML b. DCL c. CCL d. DDL e. DQL

32. Chỉ ra câu lệnh thực hiện việc tăng đồng loạt giá sách lên 10 %.

299

Tập bài giảng SQL Server

a. UPDATE Sach SET Gia*10/100; b. UPDATE Sach SET Gia=Gia*10/100;

c. UPDATE Gia=Gia+Gia*10/100 FROM Sach;

d. UPDATE Sach SET Gia=Gia+Gia*10/100;

33. Mệnh đề 1: Khoá có giá trị như là Khoá chính (Primary Key) được gọi là khoá thứ cấp (Secondary Key). Mệnh đề 2.Khoá ứng viên (Candidate key) không được dùng làm khoá chính (Primary Key) thì được gọi là khoá thay thế (Alternate Key) b. Mệnh đề 1 là sai a. Mệnh đề 1 là đúng

c. Mệnh đề 2 là đúng d. Mệnh đề 2 là sai

34. Thực hiện hành động nào sau đây mà bảng Inserted có chứa dữ liệu?

a. Update b. Delete c.Select

35. Loại hàm nào sau đây được sử dụng để trả cũng trả về kết quả là một tập hợp

nhưng chỉ dựa trên một câu lệnh SQL duy nhất.

a. Scalar

b. Inline table-valued

c. Multi-statement table-value

36. __________ đảm bảo rằng các mối quan hệ được định nghĩa giữa các bảng là đúng

đắn và các hiện tượng xoá/sửa không hợp lệ không thể xảy ra.

a. Toàn vẹn thực thể

b. Toàn vẹn miền

c. Toàn vẹn do người dùng định nghĩa (User-defined integrity)

d. Toàn vẹn tham chiếu

37. Để xem trường ngày sinh với giá trị từ 10/02/2004 đến 12/02/2004 trong bảng

Sinh viên, ta sẽ dùng câu lệnh nào dưới đây? a. SELECT * FROM SV WHERE ns BETWEEN "10/02/2004" AND

"12/02/2004";

b. SELECT * FROM SV WHERE ns BETWEEN #10/02/2004# AND #12/02/2004#; c. SELECT * FROM SV WHERE ns NOT BETWEEN #10/02/2004# AND

#12/02/2004#;

38. Thực hiện hành động nào sau đây mà bảng Inserted không chứa dữ liệu? c. Insert a. Update b. Delete

39. Biến toàn cục nào sau đây trả về số lượng các bản ghi được trỏ đến gần đây nhất?

a. @@ERROR c. @@CPU_BUSY b. @@CONNECTIONS d. @@CURSOR_ROWS

40. Câu lệnh nào dưới đây trả về số lượng các sinh viên?

300

Tập bài giảng SQL Server

a. Select count(Masv) from SV b. Select sum(Masv) from SV

c. Select max(MaSV) from SV

d. Select MaSV from SV where count(MaSV) >0

41. Kích thước của kiểu CHAR là bao nhiêu?

a. 2 bytes b. 8 bytes c. 1 byte d. 4 bytes

42. Ta có thể dùng lệnh ALTER TABLE để xoá các ràng buộc trong bảng.

a. Đúng b. Sai

43. Đâu là biến toàn cục ? a. @sv b. @kq

c. @diem d. @@CURSOR_ROWS

44. Kỹ thuật nào dưới đây được dùng để thiết lập sự toàn vẹn thực thể? c. Foreign Key b. Unique Key a. Primary Key

d. Identity Property e. Check Key f. Default Key

45. Muốn xoá tất cả các dòng trong bảng SV mà không tốn tài nguyên của hệ thống và không ghi trong các bản nhật kí giao dịch (transaction log). Ta sẽ dùng câu lệnh

nào?

a. Truncate b. Delete c. Drop

d. Không thể dùng câu lệnh nào để thực hiện được yêu cầu đã nêu. 46. Xác định câu lệnh đúng để xem các bản ghi về khách hàng (KH) có DC.

a. SELECT * from KH where DC IS NOT NULL

b. SELECT * from KH where DC = NOT NULL

c. SELECT * from KH where DC NOT NULL

d. SELECT * from KH where HAVING DC NOT NULL

47. Join hay các truy vấn con (subquery) chạy nhanh hơn?

a. Joins b. Subqueries

48. Giả sử bạn đang làm việc trong một dự án cơ sở dữ liệu thư viện (Library project). Bạn phải thiết kế một cơ sở dữ liệu cho hệ thống đó. Việc vận hành hệ thống này sẽ thường xuyên thay đổi vị trí các bản ghi. Bạn nên dùng loại câu lệnh SQL nào?

b. DML a. DQL d. DDL e. CCL

c. DCL 49. Thực hiện hành động nào sau đây mà bảng Deleted không chứa dữ liệu? c. Insert a. Update b. Delete

50. Tệp cơ sở dữ liệu nào dưới đây luôn tồn tại trong cơ sở dữ liệu?

a. Các tệp dữ liệu sơ cấp (Primary data files) b. Các tệp dữ liệu thứ cấp (Secondary data files)

c. Các tệp nhật kí (Log files)

301

Tập bài giảng SQL Server

d. Các tệp dữ liệu lệnh (Command data files)

51. Loại hàm nào sau đây được sử dụng để trả cũng trả về kết quả là một tập hợp

nhưng có thể dựa trên nhiều câu lệnh SQL

a. Scalar

b. Inline table-valued c. Multi-statement table-value

52. Đoạn chương trình sau đây trả về giá trị nào? CREATE PROCEDURE sp_TestOutput3

@a int, @b int

AS

BEGIN

declare @c int select @c = @a + @b

return @c

END

GO

Declare @tong int

exec @tong = sp_TestOutput3 100, 200

select @tong

a. 0 b. 300

53. Tìm ra phát biểu đúng về toàn vẹn tham chiếu.

a. Toàn vẹn tham chiếu đảm bảo mối quan hệ giứa các bảng không bị mất khi thao

tác trên các bản ghi của chúng.

b. Toàn vẹn tham chiếu không đảm bảo tính nhất quán về giá trị của trường khóa

trong các bảng.

c. Toàn vẹn tham chiếu đảm bảo khi giá trị của trường khóa bị thay đổi, tất cả các

tham chiếu đến nó cũng được thay đổi theo. 54. Nhóm quyền nào sau đây cho phép thực hiện mọi thao tác trên SQL Server 2008 b.ServerAdmin a. SysAdmin

c. ProcessAdmin d. SetupAdmin

55. Khi hai hay nhiều trường được liên kết với nhau mà xác định mỗi dòng trong bảng

là duy nhất, thì khóa chính được gọi là _________

a. Composite key (Khóa kết hợp)

b. Candidate key (Khóa ứng viên) c. Alternate key (Khóa thay đổi)

56. _________ đảm bảo hạn chế giá trị đưa vào đối với một trường cụ thể.

302

Tập bài giảng SQL Server

a. Toàn vẹn thực thể b. Toàn vẹn miền

c. Toàn vẹn tham chiếu

57. ________là một trường hay một tập hợp các trường mà giá trị của chúng trùng

với khóa duy nhất trong một bảng khác.

a. Khóa chính (Primary key) b. Khóa phụ (Secondary key)

c. Khóa ngoại (Foreign key)

58. Biến toàn cục nào sau đây trả về số lượng nghìn trên giây hệ thống đã được xửlý

khi SQL Server được bắt đầu.

b. @@CONNECTIONS d. @@CURSOR_ROWS

a. @@ERROR c. @@CPU_BUSY 59. Có mấy loại trigger? c. 5 b. 1 a. 3 d. 6

60. Câu lệnh nào sau đây thuộc loại ngôn ngữ DML?

a. Câu lệnh CREATE b. Câu lệnh SELECT

c. Câu lệnh GRANT

d. Câu lệnh DROP 61. _________ quy định không một thành phần nào của khóa chình trong một bảng cơ

sở được phép chứa giá trị NULL.

a. Toàn vẹn tham chiếu

b. Toàn vẹn miền

c. Toàn vẹn trường

d. Toàn vẹn thực thể

62. Thực hiên hành động nào sau đây mà các dòng dữ liệu cũ chịu sự tác động của câu lệnh sẽ được sao chép vào bảng DELETED, còn trong bảng INSERTED sẽ là các

dòng dữ liệu mới. a. Update b. Delete c. Insert

63. Thực thi một lệnh truy xuất dữ liệu trong cơ sở dữ liệu được gọi là _________ a. Giao dịch b. Truy Vấn

c. Thao tác d. Câu lệnh

64. Loại Trigger nào sau đây mà là loại ngầm định, sẽ thực hiện các lệnh bên trong

Trigger sau khi đã thực hiện xong sự kiện kích hoạt Trigger.

a. INSTEAD OF b. AFTER c. FOR

65. SQL Server được thiết kế theo mô hình Clien/Server

a. Đúng b. Sai

303

Tập bài giảng SQL Server 66. SQL Server 2008 dựa trên ___________

a. Mô hình Flat-File b. Mô hình phân cấp

c. Mô hình mạng

c. Mô hình quan hệ 67. Cơ sở dữ liệu nào sau đây là cơ sở hệ thống trong SQL Server 2008? c. pubs a. msdb b. northwind D. QLTS

b. 2 d.4 c.3

68. Có bao nhiêu kiểu cơ sở dữ liệu trong SQL Server 2008? a. 1. 69. SQL Server 2008 kiểm tra người dùng hợp lệ ở hai cấp độ ______________

a. SQL Server Authentication

b. System Authentication

c. Login Authentication

70. Đối với mỗi một bảng hoặc chỉ mục, các hàng dữ liệu được lưu trữ liên tiếp nhau

_____trang dữ liệu .

a. 4 KB b. 8 KB c. 16 KB

71. Microsoft SQL Server 2008 Database Engine là dịch vụ chính để

____________________ dữ liệu.

a. Sắp xếp, xử lý và bảo mật

b. Kiểm tra, xử lý và bảo mật

c. Sắp xếp, nén và bảo mật

d. Sắp xếp, xử lý và khôi phục

72. Chế độ xác thực nào sau đây mà khi đăng nhập vào SQL Server người dùng cần

phải cung cấp User Name và Password.

a. Windows Authentication b. SQL Server Authentication

73. Những câu nào sau đây cho biết những tính năng cơ bản của SQL Server 2005? a. Tích hợp với Internet

b. Mềm dẻo (Scalability) và Availability (Mở rộng)

d. Kho dữ liệu e. Hỗ trợ mô hình Client/Server. f. Tất cả các phương án trên

74. Biến toàn cục nào sau đây trả về số lượng các kết nối đến Server kể từ kết nốicuối

cùng được bắt đầu. a. @@ERROR b. @@CONNECTIONS

c. @@CPU_BUSY d. @@CURSOR_ROWS

75. Mục đích sử dụng toán tử IN ? a. So sánh 2 giá trị giống nhau

b. Hạn chế kết quả trả về trong danh sách tập kết quả

304

Tập bài giảng SQL Server

c. Thực hiện so sánh các đẳng thức d. Đánh giá phạm vi của giá trị

76. Câu lệnh SELECT DATEPART(day,‟01/15/2000‟) trả về giá trị nào sau đây ?

a. 4 b. 15 c. 5

d. 6 77. Xác định câu lệnh truy vấn mà trả về tất cả tên trong bảng sinh viên chứa ký tự 'L',

nhưng không phải là ký tự đầu tiên. a. SELECT * FROM SV WHERE Names LIKE „L‟ b. SELECT hoten FROM SV WHERE Name LIKE „%L‟

c. SELECT * FROM SV WHERE Name LIKE „&L‟

d. SELECT * FROM SV WHERE Name LIKE „%L%‟

e. SELECT hoten FROM SV WHERE Name LIKE „[^L]%L%‟

78. Kết quả của POWER(6, 2) là bao nhiêu? b. 3 a. 12 c.36 d. 4

79. Hàm _______ trong SQL Server trả về ngày hiện tại.

a. getdate() b. now() c. date() d. currentdate()

80. Microsoft SQL Server hỗ trợ hai loại chú thích sau:

a. -- (hai dấu trừ ) b. *

c. ' 81. Câu lệnh SELECT DATEDIFF(mm,‟01/01/99‟,‟05/01/99‟) trả về giá trị nào sau

đây ?

a. 4 b. 1 c. 5 d. 6

82. Câu lệnh nào sau đây thuộc loại ngôn ngữ DLL?

a. Câu lệnh CREATE b. Câu lệnh SELECT

c. Câu lệnh INSERT d. Câu lệnh UPDATE

83. Kiểu dữ liệu nào lưu trữ dữ liệu kí tự, nó được cố định kích thước và có hỗ trợ

Unicode?

a. nchar b. nvarchar c.char d. text.

84. Kiểu dữ liệu nào sẽ sử dụng 4 byte trong bộ nhớ máy tính, thường được sử dụng

để lưu trữ giá trị số nguyên. b. smallint a. int c.char d. text.

85. Biến toàn cục nào sau đây trả về số lượng lỗi của T-SQL gần nhất.

a. @@ERROR c. @@CPU_BUSY b. @@CONNECTIONS d. @@CURSOR_ROWS

86. Loại hàm nào sau đâyđược sử dụng để trả về một duy nhất một giá trị dựa trên một

số các tham số truyền vào. a. Scalar

b. Inline table-valued

305

Tập bài giảng SQL Server

c. Multi-statement table-value

87. Loại Trigger nào sau đây mà hoạt động của sự kiện gọi trigger sẽ bị bỏ qua và thay

vào đó là các lệnh trong trigger được thực hiện.

a. INSTEAD OF b. AFTER c. FOR

88. Loại sao lưu nào sau đây sao lưuđầyđủcơ sởtrêncácphương tiệnlưutrữ. b. Diferential backup a. Fullbackup c. Transactionlogbackup

89. Nhóm quyền nào sau đây cho phép thêm hay loại bỏ đối tượng liên kết SQL

Server 2008

a. SysAdmin b.ServerAdmin

c. ProcessAdmin d. SetupAdmin

90. Chế độ xác thực nào sau đây mà người sử dụng có thể đăng nhập vào SQL Server

mà không cần cung cấp User Name và Password. a. Windows Authentication b. SQL Server Authentication

306

Tập bài giảng SQL Server

TÀI LIỆU THAM KHẢO

[1]. Nguyễn Thiên Bằng, Phương Lan. Giáo trình SQL Server 2000. NXB Lao động-

Xã hội. 2005.

[2]. Phạm Hữu Khang, Phương Lan. Microsoft SQL Server 2008 Quản trị cơ sở dữ

liệu. Tập 1, tập 2. NXB Lao động-Xã hội. 2009.

[3]. Phạm Hữu Khang. Lập trình ứng dụng chuyên nghiệp SQL Server 2008. NXB

Lao động-Xã hội. 2007.

[4]. Nguyễn Ngọc Minh, Hoàng Đức Hải. Tự học Microsoft SQL Server 2000. NXB

Lao động-Xã hội. 2005.

[5]. SQL Server 2005, T-SQL Recipes: Problem, Solution, Approach – Appress

Publisher.

[6]. Sams Teach yourself Microsoft SQL Server 2005 Express in 24 hours. [7]. Biil Hamilton. Programming SQL Server 2005. O‟Reilly, 2006

[8]. Robert Vieira. Beginning Microsoft SQL Server 2008 Programming. Wrox, 2008.

[9]. Rodney Landrum, Shawn McGehee and Walter J. Voytec. Pro SQL Server 2008

Reporting Services, Apress, 2008

[10]. Robert D. Schneider and Darril Gibson. Microsoft SQL Server 2008 All-in-One

Desk Reference For Dummies, 2008.

[11]. Thomas Rizzo, Adam Machanic, Robin Dewson, Rob Walters, Joseph Sack,

Julian Skinner, Louis Davidson. Pro SQL Server 2005, Apress, 2006.

[12]. Rob Walters, Michael Coles, Robin Dewson, Fabio Claudio Ferracchiata, Jan D.

Narkiewicz, and Robert Rae. Accelerated SQL Server, Apress, 2008.

xii