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
[
[
)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].]
[,VIEWMETADATA]
AS
WITH CHECK OPTION
Trong đó:
- Database_Name: Tên cơ sở dữ liệu
- View_Name: Tên View cần tạo
- COLUMN_NAME_LIST: Danh sách các trường được sử dụng cho view
- SELECT STATEMENT: Câu lệnh SQL định nghĩa View
- WITH CHECK OPTION: Buộc tất các câu lệnh thay đổi dữ liệu trong view phải
được thực hiện theo tiêu chuẩn của câu lệnh SQL. Khi một dòng bị thay đổi thông qua
View thì WITH CHECK OPTION đảm bảo rằng dữ liệu vẫn có thể được nhìn thấy sau
khi sửa đổi được cam kết.
- ENCRYPTION: Ngăn chặn View công bố như là một phần của bản sao SQL Server.
- SCHEMABINDING: Ngăn chặn các bảng dữ liệu mà view sử dụng không bị thay
đổi. Khi sử dụng SCHEMABINDING, select_statement phải bao gồm tên hai phần (schema.object) của bảng, quan điểm, hoặc người dùng định nghĩa chức năng được
tham chiếu. Tất cả các đối tượng tham chiếu phải được dùng trong cùng một cơ sở dữ
liệu.
- VIEWMETADATA: Cho phép tất cả dữ liệu các trường có thể được cập nhật khi
dữ liệu nguồn thay đổi.
Ví dụ: Đưa ra các thông tin gồm số báo danh, họ tên, tổng điểm 3 môn của các thí sinh.
use qlts go
CREATE VIEW vidu(Sobd, hoten, tongd)
AS Select sbd, hoten, dtoan+dly+dhoa
From thisinh
49
Tập bài giảng SQL Server
2.2.2. Sửa đối tượng 1) Sửa cơ sở dữ liệu
Tác dụng: Câu lệnh ALTER DATABASE dùng để chỉnh sửa các thông số của cơ
sở dữ liệu.
Cú pháp:
ALTER DATABASE
ADD FILEGROUP
MODIFY FILE File_specification|
MODIFY LOG FILE File_specification|
MODIFY FILEGROUP File_specification|
MODIFY NAME =
REMOVE FILE
REMOVE FILEGROUP
}
File_specification
(
[NAME=<‟Logical file name‟>,]
FILENAME=<‟File name‟>
[,SIZE=<‟Size of File‟>]
[,MAXSIZE=<‟Max size of File‟>]
[,FILEGROWTH=<‟Init size of File‟>]
) Trong đó:
- ADD FILE: Thêm tệp tin mới
- ADD LOG FILE: Thêm tệp tin log - ADD FILEGROUP: Thêm nhóm các tệp tin - MODIFY FILE: Hiệu chỉnh các thuộc tính trong tệp tin
- MODIFY LOG FILE:Hiệu chỉnh các thuộc tính trong tệp tin log
- MODIFY NAME: Thay đổi tên mới của cơ sở dữ liệu - REMOVE FILE: Xóa bỏ tệp tin
- REMOVE FILEGROUP:Xóa bỏ nhóm các tệp tin.
Ví dụ 1: Sửa dung lượng file cơ sở dữ liệu qlmbh
ALTER DATABASE qlmbh
MODIFY FILE
50
Tập bài giảng SQL Server
(
NAME=qlmbh,SIZE=100
)
Ví dụ 2: Đổi tên file cơ sở dữ liệu qlmbh
ALTER DATABASE qlmbh Modify Name = quanly_MBH
2) Sửa bảng Tác dụng: Lệnh ALTER TABLE dùng để thay đổi cấu trúc bảng. Sử dụng ALTER
TABLE để thêm, sửa hoặc xóa trường trong bảng cũng như các ràng buộc.
Cú pháp:
ALTER TABLE
[ALTER COLUMN
[ADD CONSTRAINT
[DROP COLUMN
[DROP CONSTRAINT
Trong đó:
- Table_Name: là tên bảng cần thay đổi;
- ALTER COLUMN: là thay đổi trường;
- Column_Name: là tên trường cần bổ sung, thay đổi hay xóa;
- New_data_type: là kiểu dữ liệu thay đổi cho trường;
- ADD là bổ sung trường hoặc ràng buộc vào bảng;
- DROP COLUMN là xóa trường từ bảng.
- DROP CONSTRAINT là xóa ràng buộc. Ví dụ: Thêm trường Số chứng minh thư (SOCMT) vào bảng thí sinh.
ALTER TABLE thisinh
ADD SOCMT nvarchar(10)
3) Sửa view Tác dụng: Lệnh ALTER VIEW dùng để thay đổi cấu trúc view
Cú pháp:
ALTER VIEW Database_Name.[ower].]
[WITH [ENCRYPTION]]
[,SCHEMABINDING] [,VIEWMETADATA]
AS
51
Tập bài giảng SQL Server
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
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í 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
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:
[
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]
WHERE [NOT]
WHERE [NOT] EXISTS (
WHERE [NOT]
WHERE [NOT]
59
Tập bài giảng SQL Server
WHERE [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
- 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.
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>
…
<@Parameter_Name>
[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>
[READONLY],
…
<@Parameter_Name>
[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
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>
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>
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 [
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>
<@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>[(
RETURN
END Trong đó:
- Table_Function_Name:
131
Tập bài giảng SQL Server
- @Table_Variable_Name: Biến bảng - Column_1: Tên trường
- Data_Type_For_Column1: Kiểu dữ liệu của trường
Ta thấy rằng, sau từ khóa RETURNS là một biến bảng được định nghĩa.
Và sau từ khóa RETURN ở cuối hàm không có tham số nào đi kèm. Ta chú ý rằng danh sách các trường đưa ra sau từ khóa TABLE phải tương ứng với các trường trong câu lệnh Select ..From…Where trong thân hàm. Hạn chế khi sử dụng hàm đa lệnh:
- Không thể gọi một thủ tục lưu trữ từ các câu lệnh bên trong nó.
- Không thể sử dụng các hàm loại không xác định được xây dựng sẵn trong
SQL Server. Ví dụ Getdate, Rand, …
- Không thể sử dụng được RAISERROR và @@ERROR - Không thể được sử dụng để sửa đổi thông tin trên bảng cơ sở.
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, tổng
điểm ba môn 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
cho trước.
CREATE FUNCTION Table_VD1(@man nvarchar(20))
RETURNS @ThuKhoaN
TABLE
(
sobaodanh nvarchar(10),
hoten nvarchar(50),
man nvarchar(20),
tongdiem float )
AS
declare @diemmax float set @diemmax = BEGIN
(select Max(dtoan+dly+dhoa) from thisinh where man=@man)
insert into @thukhoan
select sbd, hoten,man,dtoan+dly+dhoa as tdiem
from thisinh where dtoan+dly+dhoa=@diemmax and man=@man
132
Tập bài giảng SQL Server
RETURN
END
Ví dụ 2: Xây dựng hàm trả về 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 một năm. Biết rằng nếu với mỗi mặt hàng
mua thì đơn giá tăng lên x%, còn với mỗi mặt hàng bán thì đơn giá tăng lên y%.
CREATE FUNCTION Table_VD2(@nam int, @x int, @y int) RETURNS @DSMH TABLE
(
Ma nvarchar(10),
Ten nvarchar(50),
MB bit, DG float
)
AS
BEGIN
insert into @DSMH(Ma, Ten,MB, DG)
select mathang.mamh, mathang.tenmh, muaban.muaban,muaban.dongia
from mathang inner join muaban on mathang.mamh=muaban.mamh
where year(ngaymb)=@nam
update @DSMH
set DG= Case MB
when 0 then DG+DG*@x/100 when 1 then DG+DG*@y/100
end
RETURN END
2) Sửa hàm người dùng
a) Hàm vô hướng
Cú pháp:
ALTER FUNCTION
(
<@Parameter_Name1>
<@Parameter_NameN>
133
Tập bài giảng SQL Server
)
RETURNS
AS
BEGIN
DECLARE <@ResultVar>
<@Parameter_Name1,…,@Parameter_NameN>
RETURN <@ResultVar>
END
Ví dụ: Thêm điều kiện, nếu chưa đủ dữ liệu đánh giá (kí hiệu là -1) thì điểm
chữ là I, nếu chưa nhận được kết quả thi (kí hiệu là -2) thì điểm chữ là X cho hàm
Scalar_Convert.
CREATE FUNCTION Scalar_Convert(@diemso float)
RETURNS char(1)
AS
BEGIN
DECLARE @diemchu char(1)
If @diemso>=8.5 SELECT @diemchu='A'
else If @diemso>=7 SELECT @diemchu='B'
else If @diemso>=5.5 SELECT @diemchu='C'
else If @diemso>=4 SELECT @diemchu='D'
else If @diemso>=0 SELECT @diemchu='F'
else If @diemso=-1 SELECT @diemchu='I'
else SELECT @diemchu='X'
RETURN @diemchu
END b) Hàm nội tuyến Cú pháp:
ALTER FUNCTION
(
<@Parameter_Name1>
…
<@Parameter_NameN>
RETURNS TABLE
134
Tập bài giảng SQL Server
AS RETURN
(
SELECT 0
) Ví dụ: Sửa hàm Inline_VD1 tìm kiếm theo mã ưu tiên. ALTER FUNCTION Inline_VD1(@but nvarchar(15)) RETURNS TABLE
AS
RETURN
(
SELECT Dbo.Thisinh.sobd, Dbo.Thisinh.hoten, Dbo.Thisinh.ngaysinh,
from Dbo.Thisinh
Where Dbo.Thisinh.maut=@but
)
c) Hàm đa lệnh
Cú pháp:
ALTER FUNCTION
(
<@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í 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
[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
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
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
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 [
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 [
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 (
,
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
WHERE TABLE_NAME =
- 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
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
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
- 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
“Server=
221
Tập bài giảng SQL Server
Initial Catalog=
UserName=
Dim
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:
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
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
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
- Xóa một đối tượng
- Loại bỏ tất cả đối tượng DataTable:
- Kiểm tra sự tồn tại:
- Kiểm tra tồn tại và có thể xóa được
- Đếm số lượng DataTable: - Ghi ra file XML:
- Đọc từ 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