Sie sind auf Seite 1von 55

SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

TÀI LIỆU HƯỚNG DẪN GIẢNG DẠY


DÀNH CHO GIẢNG VIÊN

Vũ Tuyết Trinh
trinhvt-fit@mail.hut.edu.vn
Đại học Bách khoa Hà Nội

Trang 1
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Thông tin chung

Giáo trình này giới thiệu về SQL Server, một hệ quản trị cơ sở dữ liệu của Microsoft.
Bộ giáo trình được biên soạn dựa trên những tài liệu mới nhất về SQL Server 2008
với mục đích cung cấp kiến thức cơ bản cũng như các kiến thức cập nhật về công
nghệ quản trị cơ sở dữ liệu của Microsoft.

Mục đích của giáo trình là:


1. cung cấp cho sinh viên các kiến thức cơ bản về quản trị cơ sở dữ liệu SQL
Server,
2. giới thiệu môi trường phát triển ứng dụng với cơ sở dữ liệu SQL Server,

3. cập nhật các tính năng mới, các đặc điểm nổi trội của SQL Server 2008.

Bộ giáo trình được biên soạn và tổng hợp bao gồm: slide bài giảng, bài thực hành
(lab), bài tập (exercise), và các video tự học. Toàn bộ giáo trình đều được trình bày
bằng tiếng Anh, nhằm mục đích nâng cao khả năng tiếp thu, phát triển các kỹ năng
học và nghiên cứu bằng tiếng Anh – kỹ năng vô cùng quan trọng đối với người học
công nghệ thông tin. Cùng với bộ giáo trình, tài liệu hướng dẫn này (dành cho giáo
viên) làm rõ y tưởng của mỗi bài giảng, các vấn đề mà giảng viên nên nhấn mạnh
trong từng bài giảng cũng như đưa ra một số gợi y về việc kết hợp giảng dạy ly thuyết
với thực hành.

Giáo trình có thể dùng làm tài liệu tham khảo cho sinh viên các ngành Công nghệ
thông tin, điện tử, viễn thông và tất cả những ai muốn tìm hiểu về SQL Server.

Phương pháp giảng dạy


Khóa học này yêu cầu sinh viên phải được thực hành nhiều với các ví dụ và bài toán
thực tế để rèn luyện các kỹ năng chứ không chỉ dừng lại ở tìm hiểu ly thuyết. Giáo
viên nên tổ chức các buổi học lý thuyết và thực hành đan xen nhau, lý thuyết mà sinh
viên mới học có thể được thể hiện ngay bằng các bài thực hành. Điều này giúp cho
sinh viên nhớ và hiểu kỹ hơn những gì giáo viên truyền đạt, và cũng tăng sự hứng thú
trong việc học.

Một ví dụ điển hình về việc tổ chức các buổi học đã được áp dụng như sau: mỗi

Trang 2
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

tuần học gồm 1 buổi ly thuyết và 1 buổi thực hành / bài tập
 Lý thuyết

- Thời lượng : 3 tiết học (có thể thay đổi tùy theo đối tượng sinh viên)

- Thời gian giảng slide: từ 2 đến 2.5 tiết học tùy vào nội dung bài giảng
và đối tượng học.

- Thời gian còn lại, giáo viên có thể tổ chức cho sinh viên nghe các đoạn
video và tiến hành thảo luận. Việc đan xen cho sinh viên nghe các bài
trình bày tiếng Anh có thể tốn khá nhiều thời gian. Do đó, giáo viên nên
cân đối việc chia thời gian và chọn lọc các bài trình bày để cho sinh viên
nghe và thảo luận trên lớp. Các phần khác có thể giao cho sinh viên về
nhà tự nghe rồi trả lời câu hỏi của giáo viên để buổi sau lên lớp trao đổi.
 Thực hành

- Sinh viên thực hành với các bài lab được thiết kế cho từng nội dung ly
thuyết tương ứng.

- Thông qua ví dụ cụ thể trình bày trong tài liệu hướng dẫn thực hành
(hands-on-lab), giảng viên hướng dẫn sinh viên thực hiện các bài thực
hành từng bước một.

- Sinh viên tự thực hiện các bài tập khác dưới sự hướng dẫn của giảng
viên

- Kết thúc mỗi buổi thực hành (hoặc đầu buổi học ly thuyết tiếp theo), giảng
viên nên tổng kết lại nội dung bài thực hành (và bài tập), các vấn đề
chung mà sinh viên gặp phải để cùng rút kinh nghiệm.

Bên cạnh các bài thực hành theo từng chủ đề, giáo viên nên yêu cầu sinh viên
thực hiện một bài tập tổng hợp (project, tạm gọi là đồ án môn học). Đề bài cho đồ án
môn học có thể do sinh viên tự đăng ky và/hoặc tham khảo từ một danh sách các đề
tài mẫu để lựa chọn, hoặc cho phép sinh viên tự đăng ký. Việc lựa chọn đề tài có thể
được thực hiện vào giữa học kỳ hoặc vào cuối kỳ.

Để rèn luyện kỹ năng làm việc nhóm cho sinh viên, giáo viên có thể yêu cầu lớp
phân chia thành các nhóm sinh viên để làm các đề tài. Tùy vào độ lớn của đề tài mà
giáo viên quy định số lượng thành viên của một nhóm (nên giao động trong khoảng từ
2 đến 4 sinh viên). Khi bắt đầu thực hiện và trong quá trình thực hiện đồ án môn học,
giáo viên cần có mặt để tham gia cùng sinh viên, hướng dẫn để sinh viên đi đúng
hướng và hiểu vấn đề một cách chính xác.

Trang 3
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Đề cương chi tiết


Giáo trình được chia làm 15 chương. Nội dung của mỗi chương sẽ được giảng dạy
trong một buổi ly thuyết và một buổi hướng dẫn thực hành và/hoặc làm bài tập.

Chương 1: Tổng quan về SQL Server


Bài giảng : Session 1: Overview of SQL Server
Nội dung : 1.1 Introduction to SQL Server Database
1.2 Relational Data Model
1.3 Data Access Architectures
1.4 SQL Server Services & Tools
1.5 Transact-SQL Language
1.6 CLR integration in SQL Server
1.7 Evolution of SQL Server
Bài tập : Exercise1
Video training

Chương 2: Bộ công cụ Management Studio


Bài giảng : Session 2: Management Studio
Nội dung :
2.1 Integrated Management Environement
2.2 Navigation
2.3 Administering Databases
2.4 Maintaining Databases
2.5 Writing and Executing Transact-SQL with Query Editor
2.6 Working with Templates, Solutions, Script Projects, and
Source Control
Bài thực hành Lab2
Bài tập : Exercise2
Video training
Chương 3: Thao tác dữ liệu với T-SQL
Bài giảng : Session 3: T-SQL for Data Manipilation

Trang 4
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Nội dung :
3.1 Data Manipulation Language
3.2 Selecting Records from Existing Table
3.3 Subqueries, Joins, Operations on Collection
3.4 Inserting Data into a Table
3.5 Updating Data in Table
3.6 Deleting Data from Table
3.7 Top-k queries
3.8 Full-text Search
Bài thực hành Lab 3
Bài tập : Exercise 3
Video training

Chương 4: Định nghĩa dữ liệu với T-SQL


Bài giảng : Session 4: T-SQL for Data Definition
Nội dung :
4.1 Data Definition Language
4.2 Managing Databases
4.3 Data Types
4.4 Managing Tables
4.5 Managing other SQL Server Database Objects
Bài thực hành Lab 4
Bài tập : Exercise 4
Video training

Chương 5: Bảo mật cơ sở dữ liệu SQL Server


Bài giảng: Sesion 5: Securing Database and T-SQL for Data Control

Trang 5
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Nội dung :
5.1 Understanding SQL Server Security Model
5.2 Managing logins, users, roles
5.3 Managing permissions
5.4 Data Control Language and Security Issues
5.5 Implementing Security through Database Objects
5.6 Other Security Options
Bài thực hành Lab 5
Bài tập : Exercise 5
Video training

Chương 6: Thủ tục lưu trữ trong và hàm người dùng


Bài giảng: Session 6: Stored Procedures and User-Defined Functions
Nội dung :
6.1 Understanding the concepts of batch and batch processing
6.2 Control statements
6.3 Defining and assigning variables
6.4 Implementing stored procedures
6.5 Implementing User-Defined Functions
6.6 Difference between Stored Procedures and User-Defined
Functions
Bài thực hành Lab 6
Bài tập : Exercise 6
Video training

Chương 7: Trigger
Bài giảng: Session 7: Implementing Triggers
Nội dung :

Trang 6
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

7.1 Introduction to Triggers


7.2 Creating, Altering, and Dropping Triggers
7.3 Working with Triggers
7.4 Uses of Trigger
7.5 Performance Consideration
Bài thực hành Lab 7
Bài tập : Exercise 7
Video training

Chương 8: Lập trình SQL Server với .Net


Bài giảng: Session 8: Programming SQL Server with .Net
Nội dung :
8.1.Net Framework
8.2 ADO.net
8.3 CLR Integration
8.4 Enabling CLR Integration
8.5 CLR Integration: Pros & Cons
Bài thực hành Lab 8
Bài tập : Exercise 8
Video training

Chương 9: Ràng buộc toàn vẹn


Bài giảng: Session 9: Implementing Data Integrity
Nội dung :
9.1 Types of Data Integrity
9.2 Enforcing Data Integrity
9.3 Defining Constraints
9.4 Types of Constraints
9.5 Disability Constraints
9.6 Using Defaults and Rules
9.7 Deciding Enforcement Method to Use

Trang 7
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Bài thực hành Lab 9


Bài tập : Exercise 9
Video training

Chương 10: Quản ly giao dịch và khóa


Bài giảng: Session 10: Managing Transactions and Locks
Nội dung :
10.1 Transaction
10.2 Review of Transaction Log in SQL Server
10.3 Managing Transactions
10.4 Managing Locks
Understanding SQL Server Locking Architecture
Bài thực hành Lab 10
Bài tập : Exercise 10
Video training

Chương 11: Định nghĩa và tạo chỉ mục


Bài giảng: Session 11: Planning and Creating Index
Nội dung :
11.1 Introdution to Indexes
11.2 Understanding Index Architecture
11.3 Retrieving Stored Data with SQL Server
11.4 Defining Indexes
11.5 Creating Indexes
11.6 Maintaining Index
Bài thực hành Lab 11
Bài tập : Exercise 11
Video training
Chương 12: Tối ưu hóa truy vấn
Bài giảng: Session 12: Optimizing Query Performance
Nội dung :

Trang 8
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

12.1 Introduction to the Query Optimizer


12.2 Tuning Performance Using SQL Utilities
12.3 Using an Index to Cover a Query
12.4 Using Views to Optimize Performance
12.5 Overriding the Query Optimizer
12.6 Understanding Indexing Strategies and Guidelines
Bài thực hành Lab 12
Bài tập : Exercise 12
Video training

Chương 13: Phiên bản SQL Server 64-bit


Bài giảng: Session 13: SQL Server 64 bit
Nội dung :
13.1 Overview of database performance and scalability
13.2 SQL Server 2005 Components
13.3 Advantages of 64-bit environment
13.4 Consideration for choosing SQL Server 64-bit
13.5 Deployment consideration
Video training

Chương 14: Các dịch vụ dữ liệu


Bài giảng: Session 14: Data Platform Vision
Nội dung :
14.1 Overview of Microsoft Data Platform Vision
14.2 Integration Services
14.3 Data Analysis Services
14.4 Reporting Services
Bài thực hành Lab 14
Bài tập : Exercise 14
Video training

Trang 9
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Chương 15: Những đặc điểm mới của SQL Server 2008
Bài giảng: Session 15: New Features in SQL Server 2008
Nội dung :
15.1 Policy-based Management
15.2 Optimized and Predictable System Performance
15.3 Dynamic Development
15.4 Beyond Relational Database
15.5 Pervasive Business Insight
Bài thực hành Lab 15
Bài tập : Exercise 15
Video training

Trang 10
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 1

Tổng quan về SQL Server 2008


Chương này nhằm mục đích giới thiệu khái quát (hoặc nhắc lại) các kiến thức cơ bản
về cơ sở dữ liệu và giới thiệu tổng quan về SQL Server.

Các nội dung mà giảng viên cần chuyển tải đến người học gồm
- Vai trò và lợi ích của việc sử dụng cơ sở dữ liệu trong quản ly thông tin dữ liệu
của người dùng: từ một kịch bản thực tế, giảng viên cần chỉ ra các cách tiếp
cận lưu trữ và quản ly dữ liệu (tệp và CSDL), nêu các đặc điểm (điểm mạnh và
hạn chế) của từng cách tiếp cận.
- Vai trò của hệ quản trị cơ sở dữ liệu trong việc khai thác và quản trị cơ sở dữ
liệu
- Các khái niệm cơ bản về mô hình dữ liệu quan hệ: bảng/quan hệ, bản ghi/dòng
dữ liệu, thuộc tính (attributes), miền giá trị (domain), khóa (primary key, foreign
key)
- Tìm hiểu khái quát về các mô hình truy nhập dữ liệu SQL Server: mô hình tập
trung, mô hình khách/chủ, mô hình hướng dịch vụ. Giảng viên có thể tổ chức
thảo luận về các đặc điểm, ưu/nhược điểm của từng mô hình kiến trúc này. Ở
đây, giảng viên cũng nên đưa ra các gợi y về khả năng áp dụng và lựa chọn áp
dụng các mô hình kiến trúc này tùy từng điều kiện phát triển ứng dụng cụ thể.
- Tìm hiểu khái quát về kiến trúc bên trong của SQL Server: các thành phần
(components) và dịch vụ (services). Ở đây, giảng viên cũng nên làm rõ các
thành phần cơ bản (bắt buộc) đối với hệ quản trị cơ sở dữ liệu (cụ thể là: quản
ly lưu trữ, quản ly truy vấn và quản trị giao dịch) và các thành phần thêm vào
cung cấp giá trị gia tăng cho xử ly dữ liệu trên SQL Server (ví dụ như dịch vụ
tích hợp dữ liệu, dịch vụ phân tích dữ liệu, dịch vụ tạo báo cáo, …)
- Tìm hiểu khái quát về các ngôn ngữ lập trình hỗ trợ trong SQL Server:
Transact-SQL (hay T-SQL) và CLR. Giảng viên nên chỉ rõ sự khác nhau giữa
các ngôn ngữ lập trình này và phạm vi ứng dụng hiệu quả.
- Một vài nét về quá trình phát triển và tiến hóa của hệ quản trị cơ sở dữ liệu
SQL Server. Ở đây, giảng viên nên nhấn mạnh vào các khác biệt cơ bản giữa
các “thế hệ” quản trị cơ sở dữ liệu: Thế hệ 2 là mở rộng của thế hệ 1 về khả
năng định nghĩa kiểu dữ liệu của người dùng và một số dịch vụ phân tích dữ

Trang 11
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

liệu. Thế hệ 3 (SQL Server 2005 và SQL Server 2008) là bước nhảy vọt nhờ
tích hợp CLR bên trong lõi của hệ quản trị cơ sở dữ liệu SQL Server.
- Nêu khái quát các đặc điểm nổi trội của SQL Server 2008. Các dịch vụ hỗ trợ
của SQL Server cho phép bảo vệ dữ liệu mọi nơi, mọi lúc.

Trong giờ bài tập, giảng viên có thể đưa ra các yêu cầu về tìm hiểu và thiết kế cơ
sở dữ liệu. Mục đích của giờ bài tập này là giúp sinh viên “nhớ lại” hoặc tìm hiểu
kỹ hơn về cấu trúc cơ sở dữ liệu quan hệ như cài đặt trong SQL Server. Các bài
tập nên tập trung vào:
- Tìm hiểu cấu trúc dữ liệu của một cơ dữ liệu có sẵn: giải thích chi tiết các khái
niệm về cơ sở dữ liệu quan hệ đã nêu trên lớp
- Thiết kế một cơ sở dữ liệu cho bài toán cụ thể

Trang 12
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 2

Công cụ Management Studio


Chương này nhằm mục đích giới thiệu về công cụ Management Studio, một môi
trường tích hợp cho phép truy nhập, cấu hình, quản trị và lập trình với SQL Server.

Các nội dung mà giảng viên cần chuyển tải đến người học gồm:
- Các thành phần chức năng

- Giới thiệu giao diện đồ họa cho phép thao tác với các đối tượng của cơ sở dữ
liệu SQL Server. Giảng viên nên đặc biệt nhấn mạnh vào 2 đặc điểm nổi bật của
bộ công cụ là (i) cửa sổ hiển thị và quản ly các mẫu (template explorer) và (ii)
khả năng kết nối đồng thời đến nhiều máy chủ SQL Server (registered servers)
- Với công cụ thiết kế bảng và thiết kế sơ đồ quan hệ, Management Studio cho
phép người dùng dễ dàng tạo các bảng và các liên kết thông qua giao diện đồ
họa. Giảng viên cần chỉ rõ sự tương đương trong việc xây dựng sơ đồ quan hệ
(diagram) và định nghĩa khóa ngoài cho từng bảng.
- Công cụ hỗ trợ soạn thảo và thực hiện các truy vấn Query Editor. Khi giới thiệu
về công cụ này, giảng viên nên nhấn mạnh đến xử ly va thông báo lỗi cú pháp và
ngữ nghĩa của câu truy vấn. Giảng viên giải thích cách hiểu và xử ly các thông
báo lỗi thông thường.
- Một trong những tiện ích mà Management Studio hỗ trợ người lập trình là quản
ly scripts của một dự án. Một dự án là một tập hợp các script và các files có mối
liên hệ logic với nhau. Tập hợp này gồm các thông tin về quản trị và phát triển
một cơ sở dữ liệu. Những thông tin về một dự án gồm
o Thông tin kết nối: tên máy chủ, cơ sở dữ liệu, giao thức, kiểu xác thực,
… Các thông tin này được lưu trong 1 script.
o Script SQL sử dụng bởi người dùng có thẻ được lưu trữ trong nhiều tệp
các tệp có phần mở rộng .sql và có thể được soạn thảo với Query
Editor
o Script MDX, DMX, XMLA
o Và các tệp lưu trữ các thông tin khác của một dự án
Trong phần trình bày này, giảng viên nên nêu ví dụ về một số dự án trên thực tế,
xác định các thông tin, xử ly cần thiết cho quản trị và phát triển dự án nêu trên.

Trang 13
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Dựa trên đó, giảng viên cần làm rõ lợi ích của tiện ích hỗ trợ trong Management
Studio.
Trong giờ thực hành và bài tập, giảng viên nên để thời gian cho học viên thực hành
các nội dung:
- cài đặt và cấu hình SQL Server
- sử dụng một cơ sở dữ liệu mẫu để tìm hiểu về các thành phần chức năng của
Management Studio
- xây dựng cơ sở dữ liệu đã thiết kế trước
- sử dụng công cụ về quản trị dữ liệu và script dự án với SQL Server

Trang 14
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 3

Ngôn ngữ thao tác dữ liệu T-SQL


Ngôn ngữ Transact-SQL (viết tắt T-SQL) của SQL Server cài đặt chuẩn AINSI SQL 92.
Các câu lệnh của T-SQL được chia làm 3 loại là (i)ngôn ngữ thao tác dữ liệu, (ii) ngôn
ngữ định nghĩa dữ liệu và (iii) ngôn ngữ điều khiển dữ liệu.
Chương này tập chung vào trình bày cú pháp các câu lệnh T-SQL để thao tác với một
cơ sở dữ liệu đã định nghĩa và đặc biệt nhấn mạnh đến các điểm mới của ngôn ngữ cài
đặt trong SQL Server 2008

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Giới thiệu cú pháp chung câu lệnh Select-From-Where: Giảng viên nên sử
dụng các ví dụ cụ thể để minh họa khả năng biểu diễn yêu cầu thao tác dữ liệu
với câu lệnh SQL. Vì T-SQL là một cài đặt cụ thể của chuẩn SQL 92, giảng viên
cũng nên làm rõ các đặc điểm của cài đặt này so với chuẩn SQL 92 và các cài
đặt khác (nếu sinh viên đã từng làm quen với các cài đặt khác của SQL).
- Sau khi sinh viên đã năm chắc cách viết một câu lệnh SQL đơn giản, giảng
viên sẽ giới thiệu các mệnh đề ORDER BY, COMPUTE, GROUP BY, …
- Để giải thích về câu lênh join, outer-join, giảng viên không chỉ cần giới thiệu cú
pháp câu lệnh mà phải chỉ ra các ví dụ cụ thể để minh họa về các trường hợp
sử dụng chung
Ví dụ: đưa ra danh sách sinh viên và các khóa học mà sinh viên đăng ky
và đưa ra danh sách sinh viên và các khóa học mà sinh viên đăng ky (nếu có)
- Giới thiệu cú pháp và cách viết các câu truy vấn lồng nhau (subqueries,
join, union): Ngoài việc hướng dẫn sinh viên viết các câu truy vấn dạng này
theo cú pháp đã trình bày, giảng viên nên hướng dẫn cả cách sử dụng các
mẫu có sẵn (trong cửa sổ template explorer) để xây dựng các câu lệnh này.
- Giới thiệu các câu lệnh cập nhât dữ liệu như thêm (Insert), sửa (update) và
xóa (delete): Giảng viên nên nêu ví dụ cả với những câu lệnh cập nhật từng
bản ghi và câu lệnh cập nhật nhiều bản ghi đồng thời nhờ sử dụng kết hợp với
các câu lệnh đã được giới thiệu trước đó.
- Một trong những mở rộng quan trong của SQL Server là cho phép biểu diễn
và đánh giá các câu truy vấn top-k, các câu truy vấn này sẽ trả về kết quả là k
bản ghi thỏa mãn điều kiện tìm kiếm thay vì trả về tất cả các bản ghi tìm thấy
Trang 15
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

trong cơ sở dữ liệu (k do người dùng xác định thông qua câu truy vấn). Để
thực hiện việc lựa chọn k. Giảng viên cần giải thích các hàm Top %, Rank,
Dense_Rank
- Một mở rộng khác của SQL Server là hỗ trợ tìm kiếm trên nội dung các
trường dữ liệu (Full-text Search). Để hỗ trợ dạng tìm kiếm này, SQL Server mở
rộng câu lệnh truy vấn SQL truyền thống với hai mệnh đề la CONTAINS và
FREETEXT. Kiểu tìm kiếm này đã được hỗ trợ từ các phiên bản trước của SQL
Server dưới dạng các dịch vụ gia tăng xong từ phiên bản 2008, tìm kiếm trên
nội dung được tích hợp hoàn toàn bên trong mô-tơ cơ sở dữ liệu (database
engine). Nếu có điều kiện, giảng viên nên giải thích y nghĩa và mục đích của
cải tiến này của SQL Server 2008.
Trong giờ thực hành và bài tập, giảng viên nên để thời gian cho học viên thực hành
viết các câu lệnh SQL để thực hiện các thao tác trên cơ sở dữ liệu đã tạo. Học viên
cũng nên sử dụng kết hợp giữa các tiện ích khác nhau của môi trường SQL Server
như trình soạn thảo truy vấn hay sử dụng các mẫu (template) đã có trong quá trình
xây dựng các câu truy vấn SQL.

Trang 16
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 4

Ngôn ngữ định nghĩa dữ liệu T-SQL


Chương này tập chung vào trình bày cú pháp các câu lệnh T-SQL cho định
nghĩa dữ liệu và nhấn mạnh đến các kiểu dữ liệu mới được cài đặt trong phiên
bản mới nhất SQL Server 2008.

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Phạm vi của ngôn ngữ định nghĩa dữ liệu giới hạn bởi các câu lệnh thực hiện
tạo mới (create), sửa đôi (alter), xóa (drop) các đối tượng dữ liệu trong cơ sở
dữ liệu (table, view, index, stored procedures, …). Giảng viên cũng nên phân
loại các đối tượng này và sau đó, chỉ tập trung vào 2 đối tượng chính liên quan
đến quản ly và hiển thị dữ liệu là table và view. Các đối tượng khác sẽ được đề
cập đến trong các chương có liên quan đến sau.
- Khi giải thích cú pháp câu lệnh CREATE DATABASE, giảng viên cần giải thích
kỹ nghĩa của các tham số và các lựa chọn của câu lệnh. Nếu điều kiện cho
phép, giảng viên nên trình bày và giải thích các câu lệnh trực tiếp trên máy để
có thể dễ dàng minh họa chi tiết y nghĩa của từng mệnh đề
- Giới thiệu các kiểu dữ liệu hỗ trợ trong SQL Server gồm các kiểu dữ liệu định
nghĩa sẵn (built-in data type) và kiểu dữ liệu người dùng định nghĩa (user-
defined data type). Giảng viên nên nhấn mạnh về khả năng biểu diễn mở rộng
của SQL Server so với cơ sở dữ liệu quan hệ truyền thống thông qua định
nghĩa các kiểu dữ liệu người dùng. Sau đó, giảng viên sẽ tập trung vào giới
thiêu 7 kiểu dữ liệu mới được hỗ trợ trong SQL Server 2008
- SQL Server 2008 hỗ trợ thêm 4 kiểu dữ liệu ngày tháng: date, time,
datetimeoffset, datetime2. Giảng viên cần so sánh 4 kiểu dữ liệu mới này với 2
kiểu dữ liệu ngày tháng (datetime và smalldatetime) hỗ trợ từ các phiên bản
trước, nêu một số ví dụ minh họa để làm rõ y nghĩa thực tiễn của việc sử dụng
các kiểu dữ liệu mới này
- SQL Server 2008 hỗ trợ kiểu dữ liệu mới HierarchyID cho phép biểu diễn mỗi
liên hệ giữa các giá trị trong một bảng. Giảng viên cần nêu một vài ví dụ thực
tế để sinh viên thấy rõ y nghĩa của kiểu dữ liệu này và tính thực tiễn của việc
hỗ trợ kiểu dữ liệu này trong các ứng dụng khác nhau.
- SQL Server 2008 hỗ trợ 2 kiểu dữ liệu Geography và Geometry để biểu diễn và
lưu trữ các đối tượng dữ liệu không gian. Thông qua các ví dụ ứng dụng cụ

Trang 17
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

thể, giảng viên cần làm cho sinh viên hiểu rõ các đối tượng dữ liệu không gian
cần lưu trữ như điểm (point), đường (linestring), …. Bên cạnh đó, giảng viên
cần nêu rõ các điểm khác biệt giữa 2 kiểu dữ liệu không gian mà SQL Server
2008 hỗ trợ. Thông qua việc trình bày thao tác với các đối tượng không gian
(như tính khoảng cách, tìm vùng cắt nhau, giao nhau,…), giảng viên cần làm rõ
các lợi ích đối với người lập trình, phát triển ứng dụng thông qua việc hỗ trợ
kiểu dữ liệu không gian bên trong hệ quản trị cơ sở dữ liệu.
- Khi giới thiệu về khả năng hỗ trợ lưu trữ XML bên trong SQL Server, giảng viên
nên chỉ rõ khả năng kiểm tra tính hợp lệ của dữ liệu XML dựa trên một lược đồ
định nghĩa trước.
- Trước khi giới thiệu về một kiểu dữ liệu mới hỗ trợ lưu trữ các tài liệu (văn bản
hay đa phương tiện) FileStream, giảng viên cần giải thích một số giải pháp cho
việc lưu trữ tài liệu cớ lớn, so sánh các giải pháp này và nhấn mạnh vào các
ưu điểm mà kiểu dữ liệu FileStream hỗ trợ cho quản ly các tài liệu kích thước
lớn.
- Lưu y: một số kiểu dữ liệu như HierarchyID, Geography, Geometry,… thực chất
là các CLR types cho phép định nghĩa cả các phương thức thao tác với dữ
liệu. Chi tiết về cách định nghĩa CLR type sẽ được đề cập đến trong bài giảng
về tích hợp .net trong SQL Server. Tuy nhiên, giảng viên cũng cần chỉ ra sự
khác biệt giữa các kiểu dữ liệu này với các kiểu dữ liệu truyền thống trong các
hệ quản trị cơ sở dữ liệu quan hệ.
Trong giờ thực hành và bài tập, giảng viên nên để thời gian cho học viên thực hành
viết các câu lệnh SQL để định nghĩa và cập nhật cấu trúc cơ sở dữ liệu . Học viên
cũng nên sử dụng kết hợp giữa các tiện ích khác nhau của môi trường SQL Server
như sử dụng các mẫu (template) sẵn có hay các công cụ đồ họa trong quá trình xây
dựng các yêu cầu định nghĩa dữ liệu.

Trang 18
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 5

Bảo mật cơ sở dữ liệu SQL Server


Bảo mật cơ sở dữ liệu nhằm mục đich kiểm tra tính hợp pháp của truy nhập dữ liệu
cũng như tính an toàn của thông tin. Dựa trên các công cụ quản trị hệ thống, người
quản trị cơ sở dữ liệu phải đưa ra quyết định cho phép hay không cho phép người
dùng truy cập và thao tác trên các đối tượng cơ sở dữ liệu.
Chương này tập trung vào trình bày các giải pháp bảo mật cơ sở dữ liệu trong
SQL Server và thảo luận về phạm vi cũng như hiệu quả của các phương pháp bảo
mật được áp dụng.

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Mô hình bảo mật của SQL Server: Ở đây, giảng viên cần làm rõ các mức bảo
mật khác nhau có thể cung cấp khi làm việc với cơ sở dữ. Cụ thể là: bảo mật ở
mức độ hệ điều hành, bảo mật chuẩn (ở mức hệ quản trị cơ sở dữ liệu SQL
Server) và bảo mật ở mức cơ sở dữ liệu.
- Quản ly quyền người dùng: Quyền của người dùng được định nghĩa như khả
năng người dùng có thể thao tác với cơ sở dữ liệu. Một cách khái quát, quyền
của người dùng có thể được chia làm 4 loại như sau: (i) quyền truy nhập vào
hệ quản trị cơ sở dữ liệu, (ii) quyền truy xuất cơ sở dữ liệu, (iii) quyền thực
hiện trên các đối tượng của cơ sở dữ liệu và (iv) quyền xử ly dữ liệu
- Vai trò của người dùng trên hệ quản trị cơ sở dữ liệu và trên cơ sở dữ liệu.
Giảng viên cần nhấn mạnh sự khác nhau giữa 2 loại bảo mật khác nhau. Với
mỗi loại, giảng viên cần giải thích chi tiết các vai trò mà hệ thống có thể gán
cho người dùng trong quá trình thao tác với hệ thống
- Ngôn ngữ điều khiển dữ liệu: Giảng viên giới thiệu cú pháp và cách sử dụng
các câu lệnh trong ngôn ngữ T-SQL để định nghĩa và phân quyền người dùng
(câu lệnh: Grant, Revoke, deny).
Bên cạnh đó, giảng viên cũng nên đề cập đến các phương pháp định nghĩa
và phân quyền cho người dùng thông qua bộ công cụ Management Studio,
thông qua các thủ tục của hệ thống
- Bảo mật cơ sở dữ liệu thông qua các đối tượng của cơ sở dữ liệu như khung
nhìn (view), thủ tục lưu trữ trong (stored procedures),… : Để hiểu rõ được kỹ
thuật này, giảng viên cần đưa ra minh họa về phân cấp và mối liên quan giữa
các đối tượng trong một cơ sở dữ liệu SQL Server. Qua đó, giảng viên giải

Trang 19
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

thích về mức độ phụ thuộc và phạm vi ảnh hưởng khi thực hiện phân quyền
người dùng trên các đối tượng này.
- Một số kỹ thuật bảo mật khác như sử dụng tài khoản, mã hóa,… cũng nên
được giới thiệu.
- Một điểm cần đặc biệt lưu y là bảo mật hệ cơ sở dữ liệu không chỉ đơn giản là
bảo mật cơ sở dữ liệu. Nó còn liên quan đến bảo mật hệ quản trị cơ sở dữ liệu,
bảo mật ứng dụng (môi trường thực thi ứng dụng), bảo mật hệ điều hành trên
đó chạy hệ cơ sở dữ liệu, bảo mật máy chủ web và môi trường mạng có kết
nối cơ sở dữ liệu. Để sinh viên có thể hiểu rõ thông điệp trên, giảng viên nên
nhắc lại khái niệm về hệ cơ sở dữ liệu để thấy rõ vị trí của nó trong các ứng
dụng thực tế.
Trong bài thực hành, sinh viên phải sử dụng các công cụ khác nhau để định nghĩa
các yêu cầu bảo mật cũng như đảm bảo việc thực hiện các yêu cầu này.

Trang 20
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 6

Thủ tục lưu trữ trong và hàm người dùng


Thủ tục lưu trữ trong và hàm người dùng là những thành phần rất quan trọng trong cơ
sở dữ liệu SQL Server. Chương này trình bày cách thức tạo (viết) và sử dụng thủ tục
và hàm cũng như lợi ích của việc sử dụng các thủ tục/hàm này trong thao tác với cơ
sở dữ liệu

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Giải thích khái niệm xử ly bó.
- Trong SQL Server, Transact-SQL (hay T-SQL) là một ngôn ngữ lập trình cơ bản
nhất. Nó cho phép ta định nghĩa các yêu cầu thao tác (thêm, xóa, sửa) trên các
bảng dữ liệu. Tuy nhiên, cú pháp của T-SQL chỉ tập trung vào thao tác dữ liệu
trên các bảng mà chưa có các thành phần xử ly, điều khiển. Giảng viên cần chỉ
rõ khả năng đưa các cấu trúc điều khiển, các biến vào trong câu lệnh T-SQL.
Dựa trên cấu trúc mở rộng đó, T-SQL có khả năng biểu diễn các yêu cầu thao
tác phức tạp hơn của người dùng.
- Cách cài đăt thủ tục lưu trữ trong và hàm người dùng: cú pháp câu lệnh và
cách xây dựng hàm, thủ tục thông qua công cụ Management Studio.
- Giảng viên cần nhấn mạnh những điểm giống và khác nhau khi viết và khi sử
dụng thủ tục và hàm, cách truyền tham số, …
- Nếu có thời gian, giảng viên nên giải thích quá trình thực hiện của một thủ tục
lưu trữ trong để chỉ ra lợi ích của việc sử dụng chúng. Giảng viên cũng nên giới
thiệu một số thủ tục lưu trữ trong của hệ thống hay được sử dụng
Trong giờ thực hành, sinh viên tiến hành xây dựng các thủ tục, hàm và kiểm tra việc
sử dụng chúng

Trang 21
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 7

Trigger
Trigger là một dạng đặc biệt của thủ tục lưu trữ trong (stored procedures) dùng để
phản hồi các sự kiện cụ thể. Trigger gồm một đoạn mã được gắn với bảng dữ liệu và
được tự động kích hoạt khi có một sự kiện xác định trước được xảy ra. Bởi tính chất
đó, triggers không thể nhận các tham số đầu vào như hàm, thủ tục và cũng không có
giá trị trả về như hàm.
Chương này trình bày về cách tạo và sử dụng trigger khi xây dựng một ứng dụng cơ
sở dữ liệu.

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Định nghĩa về trigger: Giảng viên cần giải thích cho sinh viên đặc điểm của
trigger và so sánh nó với thủ tục lưu trữ trong và hàm người dùng
- Giải thích cú pháp câu lệnh tạo trigger: giảng viên cần nhấn mạnh đến liên kết
bắt buộc giữa một trigger và một bảng, các sự kiện mà trigger có thể gắn vào
để được kích hoạt (INSERT, UPDATE, DELETE) và so sánh mệnh đề FOR |
AFTER với mệnh đề INSTEAD OF.
- Giải thích về hoạt động của trigger: giảng viên nên đưa ra một số tình huống
sử dụng trigger và hướng dẫn sinh viên phân tích hoạt động của các trigger
này. Từ phân tích và nhận xét, giảng viên nhấn mạnh lợi ích của việc sử dụng
trigger trong một số trường hợp cũng như các bất lợi gặp phải khi các trigger
không được sử dụng một cách hợp ly. Từ đó, giảng viên hướng dẫn sinh viên
để tìm ra các trường hợp sử dụng trigger tốt
o Sử dụng trigger để đảm bảo các ràng buộc toàn vẹn
o Sử dụng để kiểm tra các ràng buộc một cách uyển chuyển hơn
o Sử dụng trigger để kiểm tra quy tắc ràng buộc
o Sử dụng các trigger có tính đệ quy
o Sử dụng trigger thực hiện theo thứ tự
o Sử dụng trigger để thực hiện thay thế các xử ly ngầm định như thêm,
xóa, sửa
- Một điểm quan trọng khác trong khai thác các trigger mà giảng viên cũng cần
đề cập là việc sử dụng các hàm UPDATE() và COLUMNS_UPDATED(). Các

Trang 22
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

hàm này chỉ có hiệu lực trong phạm vi của một trigger và cho biết chi tiết việc
cập nhật có tác dụng trên từng trường dữ liệu cụ thể nào trong bảng. Giảng
viên nên nêu một số ví dụ để giúp sinh viên thấy rõ ích lợi của việc sử dụng
các hàm này.
- Cũng như nhiều đối tượng khác của cơ sở dữ liệu SQL Server, tạo và cập nhât
các trigger có thể được thực hiện thông qua câu lệnh CREATE TRIGGER hay
sử dụng giao diện của Management Studio. Giảng viên nên giới thiệu cả hai
cách tạo trigger và để sinh viên thực hành với cả hai cách này trong giờ thực
hành
Trong giờ thực hành, sinh viên thực hiện tạo các trigger, chạy thử và kiểm tra hoạt
động của các trigger để làm sáng tỏ các lợi ích của việc sử dụng trigger đúng cách
cũng như các bất lợi mà việc sử dụng trigger một cách tùy tiện, không hợp ly
mang lại.

Trang 23
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 8

Lập trình SQL Server với .Net


.Net framework là một môi trường phát triển ứng dụng với một thư viện lập trình
phong phú hỗ trợ cho xây dựng giao diện, kết nối cơ sở dữ liệu, mã hóa,…Trong .Net
framework, CLR (Common language runtime) là thành phần quan trọng nhất, đảm
bảo môi trường thực thi chương trình trên nền .net
Chương này tập trung vào trình bày về lập trình SQL Server với .Net. Không chỉ dừng
lại ở việc xây dựng các ứng dụng trên nền .net kết nối đến cơ sở dữ liệu thông qua
ADO.net, SQL Server 2008 tích hợp CLR bên trong lõi hệ quản trị cơ sở dữ liệu cho
phép viết các truy vấn dữ liệu, định nghĩa các kiểu dữ liệu mới và viết các đoạn
chương trình xử ly bên trong SQL Server với một ngôn ngữ bất kỳ trên .net.

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Nhắc lại các đặc điểm cơ bản của .Net: Do chương này trình bày sâu vào việc
khai thác và viết chương trình .net trong một cơ sở dữ liệu SQL Server, sinh
viên cần phải được làm quen với .net và ít nhất một ngôn ngữ lập trình trên
.net. Với đối tượng sinh viên chưa có khái niệm và chưa quen thuộc với .net,
giảng viên nên sắp xếp để có thể trình bày kỹ hơn trước khi giảng dạy chương
này.
- Giải thích về ADO.net: Ở đây, giảng viên cần giải thích rõ cơ chế thực hiện kết
nối cơ sở dữ liệu qua ADO.net. Theo mô hình này, phía ứng dụng mở kết nối
đến cơ sở dữ liệu, truy cập dữ liệu, lưu trữ dữ liệu trong bộ nhớ trong trong
quá trình thao tác với dữ liệu, gửi lại dữ liệu cập nhật và đóng kết nối. Giảng
viên cần làm rõ ưu nhược điểm của mô hình kết nối dữ liệu này. Tốt hơn, giảng
viên có thể đưa ra các tình huống, tổ chức thảo luận để tự sinh viên có thể
phát hiện ra các đặc điểm của mô hình.
- Trình bày về tích hợp CLR bên trong cơ sở dữ liệu SQL Server: Giảng viên cần
trình bày rõ mô hình ứng dụng mà trong đó ta có thể viết và khai thác CLR.
Phần trình bày này đòi hỏi phải đọc và hiểu nhiều mã chương trình. Nếu có
điều kiện, giảng viên nên kết hợp giữa trình bày ly thuyết, xem demo chương
trình và phân tích mã lệnh của chương trình demo.
- Từ các trình bày chi tiết về tích hợp CLR và các ví dụ, giảng viên hướng dẫn
sinh viên thảo luận để tìm ra ưu và nhược điểm của việc sử dụng mã lệnh CLR

Trang 24
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

và đưa ra các chỉ dẫn cho việc lựa chọn giữa sử dụng SQL CLR và T-SQL.
Trong giờ thực hành, học viên có thể sử dụng các demo đi kèm để tìm hiểu về
cách viết mã lệnh CLR trong các đối tượng cơ sở dữ liệu SQL Server. Đối với
chương này, phần bài tập có vai trò đặc biệt quan trọng. Đó là cách tốt nhất để
đánh giá mức độ tiếp thu và hiểu bài của sinh viên.
Nếu có điều kiện, giảng viên nên tổ chức các nhóm sinh viên, mỗi nhóm sẽ lựa
chọn một bài toán để giải quyết một cách trọn vẹn.

Trang 25
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 9

Ràng buộc toàn vẹn


Theo định nghĩa, cơ sở dữ liệu là một tập hợp thông tin có liên hệ logic với nhau. Một
mặt, mối liên hệ logic này được quy định bởi ngữ nghĩa dữ liệu đưa vào trong cơ sở
dữ liệu, mặt khác, mối liên hệ này được định nghĩa thông qua các ràng buộc về dữ
liệu. Các ràng buộc này được dùng để kiểm tra khi có sự biến đổi từ phía dữ liệu như
thêm, xóa, cập nhật.
Trong chương này, chúng ta sẽ tìm hiểu chi tiêt về ràng buộc dữ liệu và các phương
pháp đảm bảo ràng buộc toàn vẹn của dữ liệu.
.
Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Các loại ràng buộc: Giảng viên cần tìm các ví dụ thực tế để minh họa về các
loại ràng buộc như ràng buộc về miền giá trị, ràng buộc khóa chính, ràng buộc
khóa ngoài, ràng buộc duy nhất, ràng buộc kiểm tra, ràng buộc giá trị mặc định,
ràng buộc theo quy tắc hay quy luật.
- Giảng viên cần nhấn mạnh vào 2 loại ràng buộc mới chỉ được hỗ trợ từ SQL
Server 2005 là (i) cascade update và (ii) cascade delete. Cascade update dùng
để kiểm tra ràng buộc khi cập nhật thông tin để xem sự thay đổi trong dữ liệu
có vi phạm vào các ràng buộc đã định nghĩa hay không. Cascade delete để
kiểm tra ràng buộc khi xóa thông tin và cập nhật thông tin (nếu cần) để đảm
bảo những thay đổi mới trong cơ sở dữ liệu không vi phạm vào các ràng buộc
đã định nghĩa trước đó.
- Ràng buộc quy luật và ràng buộc giá trị ngầm định là một số kiểu định nghĩa
ràng buộc dữ liệu. Ở đây, giảng viên cũng nên thận trọng đưa ra khuyến cáo
của Microsoft về việc ràng buộc quy luật sẽ không được hỗ trợ trong phiên bản
tiếp theo của SQL Server 2008 (theo tài liệu trực tuyến về SQL Server 2008).
Vì vậy, chúng ta cũng nên thận trong khi sử dụng định nghĩa ràng buộc này cho
các ứng dụng đang và sẽ phát triển.
- Triggers và thủ tục lưu trữ trong là các kỹ thuật dã được tìm hiểu từ các
chương trước. Ở đây, mặc dù chúng ta không đề cập lại tới nó, giảng viên
cũng nên có những liên hệ cụ thể về việc sử dụng nó trong việc kiểm tra và
đảm bảo các ràng buộc toàn vẹn về dữ liệu.
- Điểm quan trọng nhất trong chương này là so sánh các phương thức đảm bảo
ràng buộc toàn vẹn dữ liệu. Từ đó, ta có thể đưa các khuyến cáo về việc sử

Trang 26
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

dụng các phương thức khác nhau này trong kiểm tra các ràng buộc toàn vẹn
của dữ liệu.
Trong giờ thực hành, giảng viên hướng dẫn sinh viên thực hiện việc định nghĩa các
ràng buộc và thực hiện kiểm tra ràng buộc dữ liệu thông qua các ví dụ cụ thể trên
máy. Nếu có điều kiên, sinh viên nên chạy các ví dụ trong chế độ thực hiện từng bước
một để cố gắng giải thích nhận xét so sánh quá trình kiểm tra các ràng buộc dữ liệu
khác nhau thông qua các phương thức khác nhau.

Trang 27
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 10

Quản trị giao dịch và khóa


Chương này trình bày về vấn đề quản trị giao dịch trong các hệ cơ sở dữ liệu. Giao
dịch được coi là đơn vị thực hiện nhỏ nhất trong hệ cơ sở dữ liệu.
Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Định nghĩa về giao dịch: Giảng viên nên sử dụng các ví dụ thực tế để minh họa
cho khái niệm giao dịch và tại sao phải quản ly giao dịch. Ví dụ điển hình mà ta
có thể sử dụng ở đây là một giao dịch chuyển tiền giữa 2 tài khoản ngân hàng.
Giáo viên giải thích các hành động cụ thể để có thể thực hiện giao dịch chuyển
tiền, đặt tình huống các sự cố xảy ra trong quá trình thực thi giao dich và phát
hiện các vấn đề về dữ liệu xảy ra nếu không có một cơ chế quản ly thích hợp.
- Nếu có điều kiện, giảng viên nên trình bày cho tiết tính chất ACID của giao
dịch, nghĩa của việc đảm bảo các tính chất này trong quản ly thực thi các giao
dịch.
- Thông qua ví dụ minh họa, giảng viên nên để thời gian cho sinh viên tìm hiểu
và thảo luận về các giải pháp để đảm bảo hoạt động thông suốt của các giao
dich. Từ đó, ta xác định các phép toán cơ bản trong thực thi giao dich như
BEGIN, COMMIT, ROLLBACK, SAVE
- Nếu có điều kiện, giảng viên nên dành thời gian để giới thiệu chi tiết về cấu
trúc nhật ky (log) của SQL Server. Nhật ky hệ cơ sở dữ liệu có nhiệm vụ lưu
giữ (trên đĩa cứng) tất cả các thông tin có liên quan đến thay đổi như DELETE,
UPDATE, INSERT. Giảng viên cần giải thích các thời điểm cần tạo check point
và ghi thông tin ghi nhật ky.
- Lỗi và phục hồi lỗi cũng là một vấn đề cần được đề cập đến. Nếu có thời gian,
giảng viên nên giải thích chi tiết về các kỹ thuật này. Đây chính là kỹ thuật cơ
bản trong quản trị giao dịch.
- Thiết lập và khai thác các giao dịch không tường minh (không sử dụng với câu
lệnh BEGIN TRAN, COMMIT TRAN, ROLLBACK TRAN) cũng nên được đề
cập đến trong chương này.
- Khi nói đến quản trị giao dịch, người ta không thể không nói đến vấn đề quản ly
truy nhập tương tranh và khóa. Thông qua môt ví dụ cụ thể (như giao dịch
ngân hàng), giảng viên cần làm rõ khái niệm về truy nhập tương tranh, các vấn
đề gặp phải và giới thiệu về kỹ thuật khóa như một giải pháp cơ bản cho vấn
đề này. Dựa trên các tình huống cụ thế, giảng viên giới thiệu các loại khóa và

Trang 28
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

cách thức khai thác chúng để đảm bảo điều khiển truy nhập tương tranh.
- Nếu có điều kiện, giảng viên có thể đề cập đến một vài kỹ thuật khóa như khóa
2 pha, khóa với nhãn thời gian,… và phân tích so sánh các kỹ thuật này
Trong giờ thực hành, sinh viên cần viết các module (các thủ tục) và chạy thử để
xem tác động của các lệnh quản trị giao dịch và vai trò của khóa trong quản trị
giao dịch

Trang 29
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 11

Lập kế hoạch và tạo chỉ mục


Chương này trình bày về việc xác định và tạo chỉ mục trên các bảng dữ liệu. Chỉ mục
là cách tổ chức lưu trữ dữ liệu trên bộ nhớ ngoài nhằm cải thiện tốc độ truy nhập dữ
liệu. Chương này tập trung vào tìm hiểu cách tổ chức và khai thác chỉ mục trong hệ
quản trị cơ sở dữ liệu SQL Server.

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Ý nghĩa của việc sử dụng chỉ mục trong truy nhập thông tin trên bộ nhớ ngoài:
Giảng viên nên lựa chọn một số ví dụ về tìm kiếm dữ liệu để minh họa rõ tác
dụng, vai trò của chỉ mục.
- Các hình thức tổ chức lưu trữ chỉ mục: Ở đây giảng viên cần giới thiệu chi tiết
các kiểu chỉ mục mà SQL Server hỗ trợ. Thông qua một vài câu truy vấn minh
họa, giảng viên làm cho sinh viên hiểu rõ chỉ mục được sử dụng như thế nào
khi thực hiện truy vấn và y nghĩa của nó. Nếu có thời gian, giảng viên nên yêu
cầu sinh viên thực hiên phân tích và tính toán độ phức tạp của từng kiểu tổ
chức chỉ mục. Thông qua đó, sinh viên sẽ chỉ ra kiểu chỉ mục nào phù hợp với
từng yêu cầu truy vấn khác nhau.
- Giảng viên cũng cần giới thiệu chi tiết cú pháp các câu lệnh tạo mới, thay đổi
và xóa chỉ mục trong cơ sở dữ liệu SQL Server, đặc biệt cần lưu giải thích các
lựa chọn với FILLFACTOR, PAD_INDEX
- Dựa trên phân tích về tác động của sử dụng chỉ mục trong truy nhập dữ liệu,
giảng viên làm rõ vai trò và y nghĩa của việc lựa chọn xây dựng hợp ly các chỉ
mục. Tuy nhiên, hiệu quả của chỉ mục lại phụ thuộc nhiều yếu tố, từ yêu cầu sử
dụng (cụ thể là các yêu cầu truy cập dữ liệu tù phía người dùng hay ứng dụng)
đến tổ chức lưu trữ chỉ mục này trên đĩa. SQL Server cung cấp một công cụ trợ
giúp tập hợp các thông số về hoạt động và sử dụng chỉ mục của hệ thống.
Người dùng có thể phân tích các thông số này cùng với các khuyến cáo mà
công cụ hỗ trợ của SQL Server đưa ra để điều chỉnh các định nghĩa chỉ mục
nhằm nâng cao hiệu năng hoạt động của hệ thống.

Trang 30
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 12

Tối ưu hóa truy vấn


Mục đích của tối ưu hóa truy vấn là tìm ra một chiến lược “tốt nhất” để thực hiện một
yêu cầu tìm kiếm đầu vào của người dùng. Tùy theo yêu cầu tìm kiếm, tổ chức dữ liệu
và nội dung dữ liệu lưu trữ trong cơ sở dữ liệu, hệ thống sẽ dự đoán một chiến lược
đánh giá câu truy vấn
Chương này giới thiệu về một công cụ của SQL Server cho phép theo dõi (monitoring)
và trợ giúp quá trình tối ưu truy vấn cũng như đưa ra các thông tin cần thiết cho việc
tối ưu thiết kế một cơ sở dữ liệu

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Giới thiệu về nguyên tắc của tối ưu hóa truy vấn: Tối ưu hóa truy vấn là một
vấn đề khá phức tạp. Với thời lượng 1 buổi học chúng ta khó có thể trình bày
tường tận về các kỹ thuật tối ưu hóa. Ở đây, giảng viên nên lựa chọn một số ví
dụ minh họa cụ thể để có thể làm nổi bật các “yếu tố” ảnh hưởng đến việc lựa
chọn chiến lược đánh giá truy vấn như: sự tồn tại của chỉ số trên một bảng nào
đó, kích thước các bảng dữ liệu, độ phân bố của giá trị một trường dữ liệu nào
đó,… Đây chính là các thông số mà công cụ giám sát (monitoring) của SQL
Server thu thập trong quá trinh thực thi truy vấn. Bên cạnh đó, giảng viên cũng
cần giới thiệu (nhắc lại) các phép toán đại số quan hệ cơ bản như phép chọn,
phép chiêu, kết nối, … và cây toán tử. Đây là những khái niệm hết sức cơ bản
để có thể hiểu được công việc của một bộ tối ưu hóa cũng như các nguyên tắc
cơ bản nhất của nó. Những kiến thức này là cần thiết để hiểu các kết quả kết
xuất của công cụ Tuning Advisor
- Giải thích khái niệm về workload và SQL Profiler, các thông số mà tiện tích của
SQL Server thu thập trong quá trình thực thi các truy vấn.
- SQL Server cung cấp các tiện ích cho phép người dùng có thể thao tác (ghi lại)
các thông tin trung gian trong quá trình xử ly thông qua việc lưu lại cây toán tử
trong bộ nhớ và các thông tin thống kê trong các lệnh STATISTICSTIME,
STATISTICSPROFILE, STATISTICSIO, SHOWPLAN_ALL, SHOWPLAN_TEXT
Output. Dựa trên ví dụ mẫu, giảng viên nên giải thích cho sinh viên nghĩa và
kết quả trả về từ các lệnh này, mối liên hệ với thực hiện truy vấn và những yếu
tố ảnh hưởng đến hiệu năng của thực thi truy vấn
- Bên cạnh đó, SQL Server còn cung cấp một số tiện ích đánh giá hiệu quả của

Trang 31
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

các định nghĩa chỉ mục. Dựa trên tần suất sử dụng các chỉ mục này, hệ thống
sẽ đưa các khuyến cáo về việc nên duy trì hay không nên duy trì các chỉ mục.
Giảng viên nên giải thích (nhắc lại) vai trò của chỉ mục trong việc nâng cao hiệu
quả của tìm kiếm.

Trang 32
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 13

Phiên bản SQL Server 64 bit


Chương này trình bày tổng quan về phiên bản 64 bit:lợi ich và triển vọng.

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Tổng quan về đánh giá hiệu năng cơ sở dữ liệu và tính khả chuyển của cơ sở
dữ liệu
- Tính tương thích giữa SQL Server 32 bit và 64-bit
- Các thành phần của SQL Server phiên bản 64 bit
- Lợi ích của môi trường 64-bit
- Một số vấn đề cần xem xét và triển khai với với SQL Server 64-bit

Trang 33
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 14

Các dịch vụ dữ liệu


Hệ quản trị SQL Server không chỉ cung cấp các công cụ cho phép lưu trữ và quản trị
dữ liệu. Nó còn bao gồm các dịch vụ xử ly dữ liệu. Trong chương này, chúng ta đề
cập đến 3 dịch vụ dữ liệu là dịch vụ tích hợp, dịch vụ phân tích và dịch vụ lập báo cáo.

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Tổng quan về SQL Server và các dịch vụ hỗ trợ thao tác và xử ly dữ liệu.Ở
đây, giảng viên nên làm rõ mối quan hệ và hỗ trợ lẫn nhau giữa các dịch vụ dữ
liệu dựa trên nền công nghệ của Microsoft.
- Dịch vụ phân tích: Giảng viên cần giới thiệu về mô hình dữ liêu đa chiều. Dựa
trên đó,giảng viên sẽ nêu lên yêu cầu đối với bài toán phân tích dữ liệu và giới
thiệu các tiện ích mà dịch vụ phân tích dữ liệu của Microsoft hỗ trợ
- Dịch vụ sinh báo cáo hỗ trợ phát triển việc sản sinh các báo cáo phức tạp trong
các ứng dụng
- Dịch vụ tích hợp cung cấp giải pháp tích hợp cho dữ liệu từ nhiều nguồn dữ
liệu khác nhau. Nếu có điều kiện, giảng viên cũng nên giải thích tổng quan về
các kỹ thuật tích hợp dữ liệu để sinh viên có được cái nhìn tổng thể hơn về vấn
đề này

Trang 34
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

C HƯƠNG 15

Các đặc điểm mới của SQL Server 2008


Chươngnày trình bày về một số đặc điểm của phiên bản 2008 từ góc nhìn của người
phát triển ứng dụng.

Nội dung mà giảng viên cần chuyển tải đến sinh viên bao gồm:
- Các đặc điểm của SQL Server 2008
- Hỗ trợ các kiểu dữ liệu mới trong SQL Server 2008
- Các nâng cấp về dịch vụ dữ liệu trong SQL Server 2008
- Các hỗ trợ mới cho truy cập và thao tác dữ liệu SQL Server 2008

Trang 35
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Tài liệu tham khảo


[1] Biil Hamilton. Programming SQL Server 2005. O’Reilly, 2006
[2] Robert Vieira. Beginning Microsoft SQL Server 2008 Programming. Wrox, 2008.
[3] Rodney Landrum, Shawn McGehee and Walter J. Voytec. Pro SQL Server 2008
Reporting Services, Apress, 2008
[4] Robert D. Schneider and Darril Gibson. Microsoft SQL Server 2008 All-in-One
Desk Reference For Dummies, 2008.
[5] Thomas Rizzo, Adam Machanic, Robin Dewson, Rob Walters, Joseph Sack, Julian
Skinner, Louis Davidson. Pro SQL Server 2005, Apress, 2006.
[6] Rob Walters, Michael Coles, Robin Dewson, Fabio Claudio Ferracchiata, Jan D.
Narkiewicz, and Robert Rae. Accelerated SQL Server, Apress, 2008.

Trang 36
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

P HỤ LỤC

Bài thực hành (Mẫu)

Programming SQL Server with .Net


Hands-on Lab

Objective
Estimated time to complete this lab: 60 minutes
SQL CLR integration is one of the most controversial features of SQL Server. It does
have benefits in terms of simplifying conditional logic and performing complex
calculation and string manipulation. However, you should always try to use the T-SQL
SET-based equivalents of your queries before moving your code to .NET

After completing this lab you will be able to:


• Work with SQL Server Projects

• Work with the in-process managed provider

• Leverage the .NET Framework in database development

• Understand managed code permissions

• Creating user-defined aggregates

Content
This lab consists of the following exercises:

• Working with SQL Server Projects


• Leveraging the .NET Framework in Database Development
• Understanding Managed Code Permissions
• Creating User-Defined Aggregates

Trang 37
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Exercise 1:
Working with SQL Server Projects
In this exercise, you will learn how to work with Visual Studio and Microsoft SQL
Server in tandem by creating a SQL Server project, and a basic user-defined function
whose implementation is in managed code. Then you will build a Windows Form
application that displays the result returned from the user-defined function. The goal of
this exercise is to lay a foundation for subsequent exercises by introducing how Visual
Studio and Microsoft SQL Server work together.
 Task 1: Creating a SQL Server Project
1. Start Visual Studio .
2. Select the File | New | Project menu command.

Visual Studio displays the New Project dialog:


.1 In the Project Types pane, indicate that you want to create a Visual C# project.
.2 In the Templates pane, select SQL Server Project.

.3 In the Name field, enter “SqlServerProject”.


.4 In the Location field, enter "C:\SQL Labs\User Projects".
.5 Click OK.

Visual Studio displays the Connection Properties dialog box (as shown in Figure 2).

Figure 2: The Connection Properties dialog box


A SQL Server project is associated with a specific database. This dialog box lets you
select the database to which you will be deploying managed code. Database

Trang 38
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

References are shown in the Solution Explorer and become part of the Visual Studio
environment. As you open and close different projects, Database References are
saved so they can be reused.
 Task 2: Creating a Database Reference
1. In the server name field, enter “localhost”.
2. Select Use Windows NT Integrated security.

3. In the database field, enter “AdventureWorks”.


4. Click OK to dismiss the Add Database Reference dialog box.

 Task 3: Using a User-Defined Function Template


1. In the Solution Explorer, right-click SqlServerProject and select Add | New Item
from the context menu.
2. In the Add New Item dialog box, click User-Defined Function.
3. Click Add.

In SQL Server, a user-defined function is similar to a function in other programming


languages. Unlike a stored procedure, which can return only an integer or result set, a
user-defined function can return a variety of data types. You also can treat a user-
defined function similarly to a table or view, issuing SELECT statements directly
against the function. In prior versions of SQL Server, you could only create a user-
defined function using T-SQL. With Microsoft SQL Server , you can now create user-
defined functions using managed code. Visual Studio includes a pre-defined template
to use in your SQL Server Projects to make the process easier.
4. In the Solution Explorer, open the TestScripts folder, right-click test.sql and select
Open.
Notice that when you used the User-Defined Function template, Visual Studio
automatically added an additional file to your project named test.sql. You can use the
script in test.sql for debugging your code. This script performs the actions in the
database that are required to start and test your database object.
5. In the Solution Explorer, right-click Function1.cs and select View Code.

6. In the Code Editor, before the closing bracket, type the following code:
[SqlFunction]
public static System.DateTime GetTodaysDate()
{
return System.DateTime.Today;
}
7. In the Solution Explorer, right-click test.sql and select Open.

8. Change the first line to:

Trang 39
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

select dbo.GetTodaysDate()

Task 4: Deploying a .NET Assembly to SQL Server


1. In the Solution Explorer, right-click SqlServerProject and select Deploy.

Before an assembly can be used by a database, it must first be deployed to the


database server. Visual Studio makes deploying an assembly to Microsoft SQL
Server easy to do. Just by right-clicking the project name in the Solution Explorer and
selecting the Deploy menu item, Visual Studio will automatically build and deploy your
assembly to Microsoft SQL Server . The assembly is also deployed and debugged
simply by pressing F5.
2. Once the deployment process has completed, press F5.

Note If execution stops on an ALTER PROCEDURE statement, press F5 again.

You can see that execution has stopped at the breakpoint. From here, you can step
through your routine, with full debugging capabilities.
3. Press F5.
4. In the Output window, in the Show output from drop-down list, select Database
Output.
You can see that the output from the user-defined function is displayed in the Output
window, allowing you to fully test your managed routines without leaving Visual
Studio .
 Task 5: Accessing a User-Defined Function from a Windows Application
1. Select the File | Add | New Project menu command.

2. When prompted to save the existing project, select the C:\data folder.
3. In the Project Types pane, select Visual C#
4. In the Templates list, select Windows Application.
5. In the Name field, enter :"SqlServerProjectWinApp”. In the Location field, enter
"C:\data".
6. Click OK to dismiss the dialog box.
7. If the DataSource Fields window appears, you may close it.
8. From the Toolbox, drag a Button control to the design surface of Form1.

If the Toolbox window isn’t visible, select View | Toolbox to display it.
Note

9. Double-click Button1.

Trang 40
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

10. Scroll to the top of the code file, and enter the following Imports statement:

using System.Data.SqlClient;

11. In the Code Editor, type the following code within the Button1_Click event handler:

string connectionString = "Data Source=localhost;Integrated


Security=SSPI;Initial Catalog=AdventureWorks";

using (SqlConnection conn = new SqlConnection(connectionString))


{
conn.Open();
SqlCommand cmd =
new SqlCommand("SELECT dbo.GetTodaysDate()", conn);
Object result = cmd.ExecuteScalar();
DateTime d = (DateTime) result;
MessageBox.Show(d.ToString());
}

This code is very straightforward. It opens a connection to the database and executes
a simple command to display today’s date in a message box. Note that the code
required to call a managed code user-defined function is the same as the code to call
a T-SQL user-defined function.
12. In the Solution Explorer, right-click SqlServerProjectWinApp and select Set as
StartUp Project.
13. Select the Debug | Start menu command (or press F5).
14. Click Button1.

You can see that the user define function, implemented as managed code, is
accessed from the client exactly like a user-defined function written using T-SQL.
15. Click OK.
16. Close Form1.
17. Select the File | Close Solution menu command.

This exercise provided an introduction to working with Visual Studio and Microsoft
SQL Server . You also learned how to create SQL Server projects and how to write
user-defined functions with managed code.
Exercise 2:
Leveraging the .NET Framework in Database Development
In this exercise, you will learn how to leverage the .NET Framework when doing
database development. You will learn how to create a user-defined function that uses
regular expressions to validate input. In the past, this would have been difficult to
accomplish with only T-SQL. Validating data passed to a procedure or function is a
Trang 41
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

common database operation, and this exercise shows how easily this task can be
accomplished using managed code.
 Task 1: Creating a User-Defined Function
1. Select the File | New | Project menu command.
2. Create a new C# project, selecting the SQL Server Project template.
3. In the Name field, enter “UserDefinedFunction”.

4. In the Location field, enter “C:\data”.


5. Click OK.
6. In the Add Database Reference dialog box, select the existing reference to the
AdventureWorks database.
7. Click OK.
8. In the Solution Explorer, right-click UserDefinedFunction and select Add | New
Item from the context menu.
9. In the Add New Item dialog, click User-Defined Function.
10. Click Add.
11. In the Code Editor, change the existing function declaration line to the following
code:

public static bool IsValidPostcode(string Postcode)

You will now create a user-defined function that validates a Postcode. Note that the
function is decorated with a [SqlFunction] attribute. This tells the compiler that the
function is a SQL Server user-defined function.
12. Delete the following two lines of code:

// Put your code here


return "Hello";

13. Inside IsValidPostcode, type the following line of code:

return System.Text.RegularExpressions.Regex.IsMatch(
Postcode, @"^\s*(\d{4})\s*$");

Regular expression support is just one area of additional functionality that the .NET
Framework provides. In fact, as a database developer, you now will have access to
literally thousands of pre-built classes that you can reuse in your database objects.
14. Select the File | Save All menu item to save the project. Save the project in the
C:\data folder.
 Task 2: Calling a User-Defined Function from a Windows Application
Trang 42
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

1. Select the File | Add | New Project menu command.


2. Ensure that Visual C# is still selected in the Project Types pane.
3. In the Templates list, select Windows Application.

You will now create a Windows Forms application that will test the IsValidPostcode
user-defined function.
4. In the Name field, enter “UserDefinedFunctionWinApp”.
5. In the Location field, enter "C:\data"
6. Click OK.
7. From the Toolbox, drag a TextBox control to the design surface of Form1.

The user will enter post codes into the TextBox control.
8. From the Toolbox, drag a Button control to the design surface of Form1.
9. Double-click button1.
10. In the Code Editor, type the following code within the button1_Click procedure:

string connectionString = "Data Source=localhost;" +


"Integrated Security=SSPI;" +
"Initial Catalog=AdventureWorks";

using (SqlConnection conn =


new SqlConnection(connectionString))
{
conn.Open();

SqlCommand cmd = new SqlCommand(


"SELECT dbo.IsValidPostcode(@Postcode)", conn);

cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@Postcode", SqlDbType.VarChar);
cmd.Parameters["@Postcode"].Value = textBox1.Text;

Object result = cmd.ExecuteScalar();


MessageBox.Show(result.ToString());
}

This code opens a connection to the database, and executes a simple command to
call the user-defined function, passing in a value submitted by the user. This value will
then be compared to a regular expression to insure that it is a properly formatted post
code.
11. In the Code Editor, at the top of Form1.cs, type the following line of code:

Trang 43
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

using System.Data.SqlClient;

12. In the Solution Explorer, right-click UserDefinedFunctionWinApp and select Set


as StartUp Project.
13. Select the File | Save All menu command.
14. Select the Debug | Start menu command (or press F5).
15. In the text box enter “555-5555”.

To test IsValidPostcode, you will first enter data that is invalid.


16. Click Button1.

The application calls the user-defined function and displays a message box indicating
that the data is not a valid postcode.
17. Click OK.
18. In the text box, enter “1234”.
19. Click button1.

Because “1234” is a valid post code, the code displays True.


20. Click OK.
21. Close Form1.
22. Select the File | Close Solution menu command.

In this exercise, you learned how to create a user-defined function in managed code
using Visual Studio . By leveraging the Base Class Library in the .NET Framework,
you saw how you can use managed code to create powerful database objects.
Exercise 3:
Understanding Managed Code Permissions
In this exercise, you will understand how different permission sets can be applied to
assemblies running in Microsoft SQL Server . You will create a stored procedure that
uses the .NET Framework to write to an external file. By default, managed code within
Microsoft SQL Server is constrained so that it cannot access external resources.
Therefore, appropriate permission must be granted to the assembly in order for it to
write to the file. You will also learn how to load and unload assemblies manually using
DDL statements within SQL Server Management Studio.
 Task 1: Creating a Stored Procedure that Writes to a File
1. Select the File | New | Project menu command.

2. Using C#, create a new SQL Server project..


3. In the Name field, enter “Permissions”.
4. In the Location field, enter “C:\data”
5. Click OK.

Trang 44
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

6. In the Add Database Reference dialog box, select the existing reference to the
AdventureWorks database.
7. Click OK.
8. In the Solution Explorer, right-click Permissions and select Add | New Item from
the context menu.
9. In the Add New Item dialog box, select Stored Procedure.
10. Click Add.
11. In the Code Editor, change the existing subroutine declaration line to the following:

public static void WriteToFile( string fileName, string message)

Note
Be careful to not delete the SqlProcedure attribute preceding the declaration.
Note:

You will now create the body of the stored procedure that writes to the file. The
procedure accepts two parameters: the file to write to, and the text to write.
12. Inside the WriteToFile subroutine, type the following lines of code:

using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fileName,


true))
{
sw.WriteLine(message);
}

This routine leverages the inherent functionality present in the .NET Base Class
Library to write to the file.
13. In the Solution Explorer, right-click Permissions and select Build.

14. Select the File | Save All menu item, and save the project.
 Task 2: Introducing SQL Server Management Studio
For this exercise, you will use SQL Server Management Studio to load the assembly.
This will give you an opportunity to see how to load and unload assemblies manually
using DDL statements.
1. From the Windows Task Bar, navigate to Start | All Programs | Microsoft SQL
Server | SQL Server Management Studio.
2. When prompted to connect, ensure that the Server type value is set to SQL
Server, the Server name is set to localhost, and Authentication is set to
Windows Authentication. Click Connect.
Microsoft SQL Server introduces a brand new tool for database management named
SQL Server Management Studio. This serves as a replacement for Enterprise

Trang 45
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Manager and the Query Analyzer.


3. Select the View | Registered Servers menu command to ensure that the
Registered Servers window is visible.
The Registered Servers window displays all the SQL Servers that have been
registered.
4. Select the View | Object Explorer menu command to ensure that the Object
Explorer window is visible.
The Object Explorer window displays various objects for a particular server.
Specifically, it will show databases and their associated diagrams, tables, views,
stored procedures, triggers, types, etc.
 Task 3: Registering a Server in SQL Server Management Studio
1. In Registered Servers, right-click Microsoft SQL Servers and select New |
Server Registration.
2. In the Server instance field, enter “localhost”.
3. In the Authentication drop-down list, ensure that Windows Authentication is
selected.
4. Click Test.

After a few seconds, a message box displays indicating the connection has been
successful.
5. Click OK.
6. Click Save.
7. In Registered Servers, double-click localhost.
8. In the Object Explorer window, expand localhost | Databases |
AdventureWorks.
9. On the toolbar, click New Query, and then select New SQL Server Query.

Microsoft SQL Server displays the Connect to SQL Server dialog box.
10. In the Server instance field, enter “localhost”.
11. Ensure that the Authentication drop-down list has Windows Authentication
selected.
12. Click Connect.

13. In the query window, type the following line of code:

USE AdventureWorks

14. Press F5.

 Task 4: Loading an Assembly Manually using DDL Statements


1. Type the following lines of code into the query window:

Trang 46
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

CREATE ASSEMBLY Permissions


FROM 'C:\data\Permissions\Permissions\bin\Permissions.dll'

Make sure that there are no line breaks in the folder name when typing the
Note code.

2. Select the above lines of code.


3. Press F5.

Running this DDL statement loads the Permissions.dll assembly into Microsoft SQL
Server . Up until now, you have been using Visual Studio to deploy all assemblies.
This exercise demonstrates how to load an assembly manually using DDL for two
reasons. First, loading the assembly automatically doesn’t allow you to configure the
permissions for an assembly, and the ability to configure a permission set will be
needed later in the exercise. Second, this gives you a great opportunity to see what is
going on under the covers.
4. Type the following lines of code:

CREATE PROCEDURE WriteToFile


@FILENAME NVARCHAR(256),
@MESSAGE NVARCHAR(4000)
AS
EXTERNAL NAME Permissions.[StoredProcedures].WriteToFile

5. Select the above lines of code.


6. Press F5.

Running this DDL statement will create an entry point for the managed stored
procedure in the assembly you just loaded.
7. Type the following line of code:

EXEC WriteToFile 'c:\test.txt', 'This is a test'

8. Select the above line of code.


9. Press F5.

Running this T-SQL will cause an error indicating that you don't have permission to
write to the file you specified, with text looking something like this (the actual text may
be slightly different):

Trang 47
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Msg 6522, Level 16, State 1, Procedure WriteToFile, Line 0


A .NET Framework error occurred during execution of user defined routine or
aggregate 'WriteToFile':
System.Security.SecurityException: Request for the permission of type
'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
System.Security.SecurityException:
at System.Security.CodeAccessSecurityEngine.Check(Object demand,
StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.CodeAccessPermission.Demand()
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32
rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options,
SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access,
FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.StreamWriter.CreateFile(String path, Boolean append)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding,
Int32 bufferSize)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at StoredProcedures.WriteToFile(String fileName, String message)

This error is expected. To ensure the security of the server, Microsoft SQL Server only
grants a limited set of permissions to an assembly. The file is a secured resource and
by default a stored procedure is not allowed to access secured resources. If an
assembly needs additional permissions, it must be specifically granted.
 Task 5: Unloading an Assembly and Stored Procedure Manually Using DDL
Statements
1. Type the following two lines of code:

DROP PROCEDURE WriteToFile


DROP ASSEMBLY Permissions

2. Select the above lines of code.


3. Press F5.

This will unload the stored procedure and assembly.


 Task 6: Loading an Assembly with a Specific Permission Set
1. Type the following lines of code:

Trang 48
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

ALTER DATABASE AdventureWorks SET TRUSTWORTHY ON

CREATE ASSEMBLY Permissions


FROM 'C:\data\Permissions\Permissions\bin\Permissions.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS

Make sure that there are no line breaks in the folder name when typing the
Note code.

An important distinction between this CREATE ASSEMBLY statement and the


previous one is that this time you’re specifying the permission set to be used by the
assembly. There are three different permission sets: SAFE, EXTERNAL_ACCESS,
and UNSAFE.
SAFE is the default permission set and works for the majority of scenarios. When
code in an assembly runs under the SAFE permission set, it can only do computation
and data access within the server via the in-process managed provider.
EXTERNAL_ACCESS is a code permission set that addresses scenarios where the
code needs to access resources outside the server such as the files, network, registry
and environment variables.
UNSAFE code permission is for those situations where an assembly is not verifiably
safe or requires additional access to restricted resources, such as the Win32 API.
2. Highlight the above lines of code so that they are selected.
3. Press F5.

Running this DDL statement loads the Permissions.dll assembly into Microsoft SQL
Server with the EXTERNAL_ACCESS permission set.
4. Type the following lines of code again (or highlight the ones you had typed
previously):

CREATE PROCEDURE WriteToFile


@FILENAME NVARCHAR(256),
@MESSAGE NVARCHAR(4000)
AS
EXTERNAL NAME [Permissions].[StoredProcedures].WriteToFile

5. Select the above lines of code.


6. Press F5.

7. Type the following line of code:

Trang 49
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

EXEC WriteToFile 'c:\test.txt', 'This is a test'

8. Highlight the above line of code so that it is selected.


9. Press F5.

This time, the command is completed successfully.


10. In SQL Server Management Studio, select the File | Exit menu command. If
prompted to save your changes, click No.
 Task 7: Viewing the File
1. Open Windows Explorer and find the file you just created.

2. Double-click the file to load it into NotePad.


You can see that the message was written from the managed code into this file.
3. Close Notepad.

In this exercise, you began working with SQL Server Management Studio, part of
Microsoft SQL Server . You learned that .NET assemblies are loaded into Microsoft
SQL Server using a giver permission set. By default, assemblies are loaded with
limited privileges and cannot access external resources such files. To give an
assembly access to external resources, it must be loaded with a different additional
permission set such as EXTERNAL_ACCESS. You also learned how to manually load
and unload assemblies and stored procedures using DDL.
Exercise 4:
Creating User-Defined Aggregates
In this exercise, you will learn how to extend the list of installed aggregate functions by
creating new user-defined aggregates whose implementation is in managed code.
 Task 1: Testing the User-Defined Aggregate Template
An aggregate function performs a calculation on a set of values and returns a single
value. T-SQL already comes with several built-in aggregate functions such as COUNT,
AVG and SUM. With CLR integration, you will now be able to create your own
aggregates using managed code. For this exercise, you will create a user-defined
aggregate that performs string concatenation.
1. In Visual Studio , select the File | New | Project menu command.
2. Create a new C# project, using the SQL Server Project template.
3. In the Name field, enter “UserDefinedAggregates”.
4. In the Location field, enter "C:\data".
5. Click OK.
6. In the Add Database Reference dialog box, select the existing reference to the
AdventureWorks database.
7. Click OK.

Trang 50
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

8. In the Solution Explorer, right-click UserDefinedAggregates and select Add |


New Item.
9. In the Add New Item dialog box, click Aggregate.

10. Type UTSConcatenate as the name


11. Click Add.
12. In the Code Editor, at the top of the code window, type the following code:

using System.Text;

The aggregate you are creating will be using the StringBuilder class of the
System.Text namespace. Importing System.Text will reduce typing.
13. Above the struct declaration, just below the serialization flag, you must indicate
that you will be performing the serialization yourself. To do this, add the following
attribute to the struct

[SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize = 8000)]

You must also implement the IBinarySerialize interface so SQL


knows how to retain the values in the Stringbuilder within the
struct

public struct UTSConcatenate : IBinarySerialize

14. In the UTSConcatenate class, before public void Init(), type the following code:

private StringBuilder sb;


private bool firstConcat ;

The StringBuilder object sb will be used to perform fast string concatenations. The
Boolean flag firstConcat indicates whether a concatenation is the first concatenation.
15. In the Init procedure, before the closing bracket, type the following code:

sb = new StringBuilder();
firstConcat = true;

This will initialize the StringBuilder object when the aggregate is invoked.
16. In the Accumulate procedure, before closing bracket, type the following code:

Trang 51
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

public void Accumulate(SqlString value)


{
if (firstConcat)
{
sb.Append(value);
firstConcat = false;
}
else
{
sb.Append(",");
sb.Append(value);
}
}

These lines of code perform the actual string concatenation. Accumulate is called for
each row in the result set from which values will be aggregated.
17. In the Merge procedure, before the closing bracket, type the following code:

Accumulate(Group.sb.ToString());

The Merge method is used by the query processor to merge another instance of this
aggregate class with another instance as part of partial computations.
18. In the Terminate procedure, delete the following lines of code:

’ Put your code here


return new SqlString("");

19. In the Terminate() routine, before the closing bracket, type the following code:

return sb.ToString();

This line of code converts the StringBuilder object to a regular String object and
returns that String back to the calling code. Terminate is invoked when the entire result
set has been processed.
20. As the final step, we will need to add a Read and Write procedure required by the
IBinarySerialize interface. This is used to Serialize and De-Serialize the
StringBuilder object so that it can be passed as a parameter into the Merge
procedure.
Add the following procedures to the class before the closing bracket.

Trang 52
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

public void Read(System.IO.BinaryReader r)


{
sb = new StringBuilder(r.ReadString());
}

public void Write(System.IO.BinaryWriter w)


{
w.Write(sb.ToString());
}

The completed UTSConcatenate class should now look like the following:
using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text;

[Serializable]
[SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize = 8000)]
public struct UTSConcatenate : IBinarySerialize
{
private StringBuilder sb;
private bool firstConcat ;

public void Init()


{
sb = new StringBuilder();
firstConcat = true;
}

public void Accumulate(SqlString value)


{
if (firstConcat)
{
sb.Append(value);
firstConcat = false;
}
else
{
sb.Append(",");
sb.Append(value);
}
}

Trang 53
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

public void Merge(UTSConcatenate Group)


{
Accumulate(Group.sb.ToString());
}

public SqlString Terminate()


{
return sb.ToString();
}

public void Read(System.IO.BinaryReader r)


{
sb = new StringBuilder(r.ReadString());
}

public void Write(System.IO.BinaryWriter w)


{
w.Write(sb.ToString());
}
}

21. In the Solution Explorer, right-click UserDefinedAggregates and select Rebuild.

 Task 4: Deploying a User-Defined Function


1. Switch to SQL Server Management Studio.

2. Switch to Visual Studio .


3. In the Solution Explorer, right-click UserDefinedAggregates, and select Deploy.

 Task 5: Testing the User-Defined Aggregate


1. In Microsoft SQL Server Management Studio, in the existing query, type the
following lines of code:

SELECT dbo.UTSConcatenate(Name) FROM production.location

2. Select the above lines of code.


3. Press F5.

The results should be:

Trang 54
SQL Server 2008 Trường Đại Học Bách Khoa Hà Nội

Debur and Polish,Final Assembly,Finished Goods Storage,Frame Forming,Frame


Welding,Metal Storage,Miscellaneous Storage,Paint,Paint Shop,Paint Storage,Sheet
Metal Racks,Specialized Paint,Subassembly,Tool Crib

4. Select the File | Exit menu command. If prompted to save changes, click No.
5. In Visual Studio , select the File | Close Solution menu command.

This exercise demonstrated how to create a user-defined aggregate using managed


code.
Lab Summary
This lab showed you how Microsoft SQL Server and Visual Studio combine to
provide a new level of power and flexibility when developing database and data-
centric applications. You learned that the .NET Common Language Runtime is now
hosted in Microsoft SQL Server so that you can stored procedures, user-defined
functions and aggregates using managed code with languages such as Visual
Basic .NET and Visual C#. Although managed code does not replace T-SQL, the
ability to use managed code is an important new tool in the database developer's
toolbox.

Trang 55

Das könnte Ihnen auch gefallen