Mùa hè năm 1990, hãng Microsoft chính thức công bố sản phẩm SQL Server version 1.1, đây là một phần mềm quản trị cơ sở dữ liệu quan hệ. Tuy nhiên tại thời điểm này hãng Microsoft chưa thực sự xem SQL Server là một sản phẩm sinh lợi mà nó chỉ là sản phẩm bổ sung cho phần mềm Microsoft LAN Manger, tiền thân của SQL Server là một sự hợp tác giữa Microsoft và AshtonTate. Tháng 31992, SQL Server version 4.2 chính thức ra đời dùng cho hệ điều hành 16 bits OS2. Tháng 71993, phiên bản SQL Server dùng cho hệ điều hành Windows NT được công bố. Microsoft SQL Server 6.0 ra đời vào tháng 61995 với ngôn ngữ truy vấn dữ liệu SQL95. khoảng 10 tháng sau vào 41996 phiên bản 6.5 được công bố đem lại nhiều thành công và lợi nhuận. Tháng 11999 phiên bản SQL 7.0 ra đờiSQL Server của Microsoft được thị trường chấp nhận rộng rãi kể từ version 6.5. Sau đó Microsoft đã cải tiến và hầu như viết lại một engine mới cho SQL Server 7.0. Cho nên có thể nói từ version 6.5 lên version 7.0 là một bước nhảy vọt. Có một số đặc tính của SQL Server 7.0 không tương thích với version 6.5. Trong khi đó từ Version 7.0 lên version 8.0 (SQL Server 2000) thì những cải tiến chủ yếu là mở rộng các tính năng về web và làm cho SQL Server 2000 đáng tin cậy hơn. Một điểm đặc biệt đáng lưu ý ở version 2000 là MultipleInstance. Nói cho dễ hiểu là bạn có thể install version 2000 chung với các version trước mà không cần phải uninstall chúng. Nghĩa là bạn có thể chạy song song version 6.5 hoặc 7.0 với version 2000 trên cùng một máy (điều này không thể xảy ra với các version trước đây). Khi đó version cũ trên máy bạn là Default Instance còn version 2000 mới vừa install sẽ là Named Instance.
Tài liệu tham khảo SQL Server 2000 ĐỀ CƯƠNG MÔN HỌC LẬP TRÌNH SQL SERVER (Thời lượng 45 tiết) I - Tổng quan 1) Giới thiệu 2) Cài đặt 3) Các thành phần quan trọng SQL Server II - Quản trị SQL Server với công cụ Enterprise Manager 1) Quản lý Server a Dịch vụ SQL Server b Quản lý Server c Quản lý người dùng 2) Quản trị CSDL a Tạo CSDL b Tạo chỉnh sửa Table c Người dùng quyền hạn CSDL d Import/Export liệu CSDL III – Khai thác liệu 1) Transact-SQL 2) Query nâng cao 3) View Store Procedure 4) Ràng buộc liệu với Trigger Trang Tài liệu tham khảo SQL Server 2000 I - Tổng quan 1) Giới Thiệu SQL Server 2000 SQL Server 2000 hệ thống quản lý sở liệu (Relational Database Management System (RDBMS) ) sử dụng Transact-SQL để trao đổi liệu Client computer SQL Server computer Một RDBMS bao gồm databases, database engine ứng dụng dùng để quản lý liệu phận khác RDBMS SQL Server 2000 tối ưu để chạy môi trường sở liệu lớn (Very Large Database Environment) lên đến Tera-Byte phục vụ lúc cho hàng ngàn user SQL Server 2000 kết hợp "ăn ý" với server khác Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy Server SQL Server có editions: Enterprise : Chứa đầy đủ đặc trưng SQL Server chạy tốt hệ thống lên đến 32 CPUs 64 GB RAM Thêm vào có dịch vụ giúp cho việc phân tích liệu hiệu (Analysis Services) Standard : Rất thích hợp cho cơng ty vừa nhỏ giá thành rẻ nhiều so với Enterprise Edition, lại bị giới hạn số chức cao cấp (advanced features) khác, edition chạy tốt hệ thống lên đến CPU GB RAM Personal: Được tối ưu hóa để chạy PC nên cài đặt hầu hết phiên windows kể Windows 98 Developer : Có đầy đủ tính Enterprise Edition chế tạo đặc biệt giới hạn số lượng người kết nối vào Server lúc Ðây edition mà bạn muốn học SQL Server cần có Chúng ta dùng edition suốt khóa học Edition cài Windows 2000 Professional hay Win NT Workstation Desktop Engine (MSDE): Ðây engine chạy desktop khơng có user interface (giao diện) Thích hợp cho việc triển khai ứng dụng máy client Kích thước database bị giới hạn khoảng GB Win CE : Dùng cho ứng dụng chạy Windows CE Trial: Có tính Enterprise Edition, download free, giới hạn thời gian sử dụng 2) Cài Ðặt SQL Server 2000 (Installation) Các bạn cần có Personal Edition 64 MB RAM, 500 MB hard disk để install SQL Server Bạn install Windows Server hay Windows XP Professional, Windows 2000 Professional, NT Workstation Trang Tài liệu tham khảo SQL Server 2000 install Win 98 family Khi đưa đĩa CDROM vào ổ đĩa, chương trình Autorun.exe khởi động hiển thị hình giao diện cài đặt Bạn chọn mục "SQL Server 2000 Components" Trang Tài liệu tham khảo SQL Server 2000 Ở hình thứ hai bạn chọn Install Database Server Sau install xong SQL Server bạn install thêm Analysis Service bạn thích Chọn Local Computer để cài máy cục bộ, Remote Computer để cài đặt máy khác mạng Ở hình Installation Selection bạn chọn Create a new instance of SQL Server or install Client Tools Trang Tài liệu tham khảo SQL Server 2000 Ở hình Installation Definition bạn chọn Server and Client Tools Sau bạn nên chọn kiểu Custom chọn tất phận SQL Server Ngoài nên chọn giá trị mặc định (default) Trang Tài liệu tham khảo SQL Server 2000 Ở hình Services Accounts chọn Use the Local System account mục Service Settings Ở hình Authentication Mode nhớ chọn Mixed Mode Lưu ý SQL Server dùng chung chế độ bảo mật (security) với Win NT dùng chế độ bảo mật riêng Trong Production Server người ta thường dùng Windows Authetication độ an tồn cao dễ dàng cho người quản lý mạng cho người sử dụng Nghĩa bạn chấp nhận (authenticated) kết nối vào domain bạn có quyền truy cập Trang Tài liệu tham khảo SQL Server 2000 liệu (access data) SQL Server Tuy nhiên ta nên chọn Mixed Mode để dễ dàng cho việc học tập Sau install bạn thấy icon nằm góc phải bên hình, Service Manager Bạn Start, Stop SQL Server services dễ dàng cách double-click vào icon Lược sử phát triển Version SQL Server Mùa hè năm 1990, hãng Microsoft thức cơng bố sản phẩm SQL Server version 1.1, phần mềm quản trị sở liệu quan hệ Tuy nhiên thời điểm hãng Microsoft chưa thực xem SQL Server sản phẩm sinh lợi mà sản phẩm bổ sung cho phần mềm Microsoft LAN Manger, tiền thân SQL Server hợp tác Microsoft AshtonTate Tháng 3/1992, SQL Server version 4.2 thức đời dùng cho hệ điều hành 16 bits OS/2 Tháng 7/1993, phiên SQL Server dùng cho hệ điều hành Windows NT công bố Microsoft SQL Server 6.0 đời vào tháng 6/1995 với ngôn ngữ truy vấn liệu SQL95 khoảng 10 tháng sau vào 4/1996 phiên 6.5 công bố đem lại nhiều thành công lợi nhuận Tháng 1/1999 phiên SQL 7.0 đời SQL Server Microsoft thị trường chấp nhận rộng rãi kể từ version 6.5 Sau Microsoft cải tiến viết lại engine cho SQL Server 7.0 Cho nên nói từ version 6.5 lên version 7.0 bước nhảy vọt Có số đặc tính SQL Server 7.0 khơng tương thích với version 6.5 Trong từ Version 7.0 lên version 8.0 (SQL Server 2000) cải tiến chủ yếu mở rộng tính web làm cho SQL Server 2000 đáng tin cậy Một điểm đặc biệt đáng lưu ý version 2000 Multiple-Instance Nói cho dễ hiểu bạn install version 2000 chung với version trước mà không cần phải uninstall chúng Nghĩa bạn chạy song song version 6.5 7.0 với version 2000 máy (điều xảy với version trước đây) Khi version cũ máy bạn Default Instance cịn version 2000 vừa install Named Instance 3) Các thành phần quan trọng SQL Server 2000 SQL Server 2000 cấu tạo nhiều thành phần Relational Database Engine, Analysis Service English Query Các thành phần phối hợp với tạo thành giải pháp hoàn chỉnh giúp cho việc lưu trữ phân tích liệu cách dễ dàng Relational Database Engine - Cái lõi SQL Server: Ðây engine có khả chứa data quy mơ khác dạng table support tất kiểu kết nối (data connection) thông dụng Microsoft ActiveX Data Objects (ADO), OLE DB, and Open Database Trang Tài liệu tham khảo SQL Server 2000 Connectivity (ODBC) Ngồi cịn có khả tự điều chỉnh (tune up) ví dụ sử dụng thêm tài nguyên (resource) máy cần trả lại tài nguyên cho hệ điều hành user log off Replication - Cơ chế tạo (Replica): Giả sử bạn có database dùng để chứa liệu ứng dụng thường xuyên cập nhật Một ngày đẹp trời bạn muốn có database giống y hệt server khác để chạy báo cáo (report database) (cách làm thường dùng để tránh ảnh hưởng đến performance server chính) Vấn đề report server bạn cần phải cập nhật thường xuyên để đảm bảo tính xác báo cáo Bạn dùng chế back up and restore trường hợp Thế bạn phải làm sao? Lúc chế replication SQL Server sử dụng để bảo đảm cho liệu database đồng (synchronized) Replication bàn kỹ 12 Data Transformation Service (DTS) - Một dịch vụ chuyển dịch data vô hiệu Nếu bạn làm việc cơng ty lớn data chứa nhiều nơi khác dạng khác cụ thể chứa Oracle, DB2 (của IBM), SQL Server, Microsoft Access Bạn chắn có nhu cầu di chuyển data server (migrate hay transfer) không di chuyển bạn cịn muốn định dạng (format) trước lưu vào database khác, bạn thấy DTS giúp bạn giải công việc dễ dàng DTS bàn kỹ Analysis Service - Một dịch vụ phân tích liệu hay Microsoft Dữ liệu (Data) chứa database chẳng có ý nghĩa nhiều bạn khơng thể lấy thơng tin (Information) bổ ích từ Do Microsoft cung cấp cho bạn cơng cụ mạnh giúp cho việc phân tích liệu trở nên dễ dàng hiệu cách dùng khái niệm hình khối nhiều chiều (multi-dimension cubes) kỹ thuật "đào mỏ liệu" (data mining) giới thiệu 13 English Query - Một dịch vụ mà người Việt Nam muốn dùng :-) (?) Ðây dịch vụ giúp cho việc truy vấn liệu tiếng Anh "trơn" (plain English) Meta Data Service: Dịch vụ giúp cho việc chứa đựng "xào nấu" Meta data dễ dàng Thế Meta Data vậy? Meta data thông tin mô tả cấu trúc data database data thuộc loại String hay Integer , cột có phải Primary key hay khơng Bởi thơng tin chứa database nên dạng data để phân biệt với data "chính thống" người ta gọi Meta Data Phần Trang Tài liệu tham khảo SQL Server 2000 bạn phải xem thêm thành phần khác SQL Server giới thiệu sau SQL Server Books Online khơng có loạt nói rõ dịch vụ Trang Tài liệu tham khảo SQL Server 2000 SQL Server Books Online - Quyển “bí kíp” khơng thể thiếu: Cho dù bạn có đọc sách khác dạy SQL server bạn thấy books online hữu dụng khơng thể thiếu được( Microsoft hào phóng đính kèm theo SQL Server) SQL Server Tools - Ðây đồ nghề người quản trị sở liệu (DBA ) Ái chà kể chi tiết nhiều bạn cần đọc thêm books online Ở người viết kể vài công cụ thông dụng mà Ðầu tiên phải kể đến Enterprise Manager Ðây cơng cụ cho ta thấy tồn cảnh hệ thống sở liệu cách trực quan Nó hữu ích đặc biệt cho người học không thông thạo SQL Kế đến Query Analyzer Ðối với DBA giỏi cần cơng cụ quản lý hệ thống database mà không cần đến thứ khác Ðây môi trường làm việc tốt ta đánh câu lệnh SQL chạy đặc biệt giúp cho ta debug stored procedure dễ dàng Công cụ thứ ba cần phải kể đến SQL Profiler Nó có khả "chụp" (capture) tất kiện hay hoạt động diễn SQL server lưu lại dạng text file hữu dụng việc kiểm soát hoạt động SQL Server Ngồi số cơng cụ trực quan thường hay dùng osql bcp (bulk copy) command prompt Tóm lại dạo qua vịng để tìm hiểu SQL Server Trong sau tìm hiểu cách quản trị SQL Server với cơng cụ Enterprise Manager trước sâu vào đề tài khác Trang 10 Tài liệu tham khảo SQL Server 2000 Stored Procedure and Advanced T-SQL Ðể đọc hiểu viết bạn nên đọc qua Bài 5: Data Integrity and advanced query technique Trong tìm hiểu số cách import export data SQL Server Sau bàn qua loại Stored Procedure Cursor Sử dụng bcp BULK INSERT để import data bcp command prompt dùng để import hay export data từ data file (Text file hay Excel File) vào SQL Server hay ngược lại Thường muốn chuyển số lượng lớn data từ database system khác Oracle, DB2 sang SQL Server trước hết ta export data text file sau import vào SQL Server dùng bcp command Một trường hợp thông dụng ta export data từ SQL Server sang Microsoft Excel file Excel file input cho program hay database system khác Chúng ta chuyển data vào SQL Server dùng câu lệnh BULK INSERT Tuy nhiên BULK INSERT import data vào SQL Server export data data file bcp Ðể insert data vào SQL Server Database, data file phải có dạng bảng nghĩa có cấu trúc hàng cột Chú ý data bulk copy (copy hàng loạt dùng bcp hay BULK INSERT) vào table SQL Server table phải tồn data cộng thêm vào (append) Ngược lại export data data file file tạo data file bị overwrite tồn Cú pháp đầy đủ lệnh bcp xem SQL Server Books Online Ở trình bày số ví dụ đơn giản cách sử dụng bcp command BULK INSERT Ví dụ 1: Giả sử bạn muốn export data từ table Orders PracticeDB (đây database tạo tập số ) text file cột phân cách dấu ";" Bạn làm sau: mở DOS command prompt đánh vào dòng lệnh sau: bcp PracticeDB Orders out c:\Orders.txt -c –T –t; Trong ví dụ ta muốn bulk copy table Orders text file : out: copy data từ table hay view data file (c:\Orders.txt) Ngược lại ta dùng switch in để import data từ text file vào SQL Server Trang 57 Tài liệu tham khảo SQL Server 2000 -c: bulk copy dùng kiểu liệu Character (Char) (nếu không rõ SQL Server dùng "TAB" character (\t) để phân định cột dùng new line character (\n) để phân định hàng giá trị default) -t;: dấu ";" sau switch "t" cho biết ta muốn dùng ";" để phân định cột (nếu không dùng giá trị mặc định trên) -T: dùng (NT) Trust connection để kết nối với database Nghĩa user authenticated (cho phép) vào Windows system đương nhiên sử dụng SQL Server mà khơng cần dùng thêm username password khác Ví dụ 2: Thay copy tồn table ta dùng query để select phần data export text file sau: bcp "Select * From practiceDB Orders" queryout c:\Orders.txt -c -SVinhtai -Usa -Pabc Trong ví dụ ta select toàn data Orders table text file dùng query SQL Server authentication queryout : cho biết query table -S : tên SQL Server (hay tên Instance) -U : SQL user name dùng để log on -P : password dùng để log on Ví dụ : dùng BULK INSERT để bulk copy data từ text file vào SQL Server database Mở Query Analyser (BULK INSERT T-SQL command command prompt utility) đánh vào dòng sau : BULK INSERT PracticeDB Orders FROM 'c:\Orders.txt ' WITH (DATAFILETYPE = 'CHAR') Trong ví dụ DATAFILETYPE= 'CHAR' cho biết data chứa dạng Char data type Nêú muốn dùng data type dạng unicode dùng 'WIDECHAR' Chú ý: Các switch bcp command case-sensitive Nghĩa chữ hoa chữ thường có ý nghĩa khác Distributed Queries Ðôi muốn select data từ database system khác MS Access, Oracle, DB2 hay chí từ SQL Server khác ta cần phải dùng distributed query SQL Server dùng kỹ thuật OLEDB API để chuyển query tới database system khác Có Trang 58 Tài liệu tham khảo SQL Server 2000 cách để truy cập vào database system khác dùng LINKED SERVER Ad Hoc Computer Name Linked Server: Linked Server server ảo dùng để truy cập vào database system khác Một setup ta query data dùng four-part name : linked_server_name.catalog.schema.object_name Trong catalog thường tương đương với database name, Schema tương đương với database owner object_name tương đương với table hay view Ví dụ: Giả sử ta setup Linked Server vào Access database "PracticeDB.mdb" table tương tự PracticeDB database SQL Server (được tạo phần tập số 1) Mở Enterprise Manager -> Chọn node Security local server -> Right-Click lên node Linked Server chọn New Linked Server Sau nhập vào tên Linked Server LinkedPracticeDB, phần Provider Name chọn Microsoft Jet 4.0 OLEDB Provider Trong phần Data Source nhập vào vị trí Access database (C:\PracticeDB.mdb) click OK Ta có Linked Server tên LinkedPracticeDB xuất phần Security/Linked Server Giả sử ta muốn select data từ Linked Server ta dùng Query Analyser sau: Select * from LinkedPracticeDB Customers Trong ví dụ ta dùng tên Linked Server theo sau ba chấm (vì để truy cập vào database ta phải dùng four-part name trường hợp ta dùng default value nên không cần cho biết tên Catalog Schema phải dùng dấu chấm để phân biệt phần) Ngoài cách ta dùng pass-through query với OPENQUERY function sau: Select * from OPENQUERY(LinkedPracticeDB,'Select * from Customers') Trong ví dụ ta thấy function OPENQUERY trả data set nằm sau keyword FROM table Khi dùng OPENQUERY function ta cần cho biết tên Linked Server query mà ta muốn thực Lưu ý: function SQL Server dùng tương tự stored procedure Ad Hoc Computer Name Trang 59 Tài liệu tham khảo SQL Server 2000 Ngồi cách dùng Linked Server trình bày ta dùng ad hoc computer name (ad hoc nghĩa lâm thời, tạm thời) Nghĩa database system mà ta thường xuyên query dùng Linked Server query dùng đến ta select data OPENROWSET hay OPENDATASOURCE functions Ví dụ: ta select data từ Access database dùng OPENROWSET Select * from OPENROWSET('Microsoft.jet.oledb.4.0','C:\PracticeDB.mdb'; 'admin'; '', Customers) Trong ví dụ dùng OPENROWSET ta cần phải đưa vào tất thông tin cần thiết để connect vào database tên Provider, vị trí file, username, password (trường hợp khơng có password) tên table mà ta muốn select Mỗi lần ta thực thi câu lệnh SQL Server kiểm tra security dùng Linked Server kiểm ta lần mà thơi OPENROWSET tương tự OPENQUERY chỗ trả rowset đặt vào vị trí table câu lệnh query Ngoài cách dùng ta dùng OPENDATASOURCE để query sau: Select * from OPENDATASOURCE('Microsoft.jet.oledb.4.0', 'Data Source = C:\PracticeDB.mdb; User ID = Admin; Password = ') Customers Trong ví dụ ta thấy OPENDATASOURCE trả phần fourpart name (nghĩa tương đương với tên Linked Server) ta phải dùng thêm ba dấu chấm Cursors Nếu giải thích cách ngắn gọn cursor tương tự recordset hay dataset programming Nghĩa ta select số data vào memory sau làm việc với record cách Move Next Có loại cursors Transact- SQL Cursors, API Cursors Client Cursors Trong Transact-SQL API thuộc loại Server Cursors nghĩa cursors load lên làm việc bên phía server Trong khn khổ học ta nghiên cứu Transact-SQL cursors Transact-SQL cursors tạo server câu lệnh Transact-SQL chủ yếu dùng stored procedures triggers Trước hết xem qua ví dụ cursor: DECLARE @au_lname varchar(40), @au_fname varchar(20) Trang 60 Tài liệu tham khảo SQL Server 2000 DECLARE Employee_Cursor CURSOR FOR SELECT LastName, FirstName FROM Northwind.dbo.Employees OPEN Employee_Cursor FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname WHILE @@FETCH_STATUS = BEGIN PRINT 'Author:' + @au_fname + ' ' + @au_lname FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname END CLOSE Employee_Cursor DEALLOCATE Employee_Cursor Trong ví dụ ta select LastName FirstName từ Employees table Northwind database load vào Employee_Cursor sau in tên employee hình Ðể làm việc với cursor ta cần theo bước sau: Dùng câu lệnh DECLARE CURSOR để khai báo cursor Khi khai báo ta phải cho biết câu lệnh SELECTsẽ thực để lấy data Dùng câu lệnh OPEN để đưa data lên memory (populate data) Ðây lúc thực câu lệnh SELECT vốn khai báo Dùng câu lệnh FETCH để lấy hàng data từ record set Cụ thể ta phải gọi câu lệnh FETCH nhiều lần FETCH tương tự lệnh Move ADO recordset chỗ di chuyển tới lui câu lệnh FETCH FIRST, FETCH NEXT, FETCH PRIOR, FETCH LAST, FETCH ABSOLUTE n, FETCH RELATIVE n khác chỗ lấy data bỏ vào variable (FETCH FROM INTO variable_name) Thông thường ta FETCH data trước sau loop record cuối Cursor vòng lặp WHILE cách kiểm tra global variable @@FETCH_STATUS (=0 nghĩa thành công) Khi ta viếng thăm record ta UPDATE hay DELETE tùy theo nhu cầu (trong thí dụ dùng lệnh PRINT) Dùng câu lệnh CLOSE để đóng cursor Một số tài nguyên (memory resource) giải phóng cursor cịn khai báo OPEN trở lại Dùng câu lệnh DEALLOCATE để phóng thích hồn tồn tài nguyên dành cho cursor (kể tên cursor) Lưu ý ví dụ trước dùng Cursor ta declare số variable (@au_fname @au_lname) để chứa giá trị lấy từ cursor Bạn dùng Query Analyzer để chạy thử ví dụ Stored Procedures Trong học trước dùng Query Analyzer đặt tên save nhóm câu lệnh SQL vào file dạng script để sử dụng trở lại sau Tuy nhiên thay save vào text file ta save vào SQL Server dạng Stored Procedure Trang 61 Tài liệu tham khảo SQL Server 2000 Stored Procedure nhóm câu lệnh Transact-SQL compiled (biên dịch) chứa SQL Server tên xử lý đơn vị (chứ nhiều câu SQL riêng lẻ) Ưu Ðiểm Của Stored Procedure Stored Procedure có số ưu điểm sau: Performance : Khi thực thi câu lệnh SQL SQL Server phải kiểm tra permission xem user gởi câu lệnh có phép thực câu lệnh hay khơng đồng thời kiểm tra cú pháp tạo execute plan thực thi Nếu có nhiều câu lệnh gởi qua network làm giảm tốc độ làm việc server SQL Server làm việc hiệu dùng stored procedure người gởi gởi câu lệnh đơn SQL Server kiểm tra lần sau tạo execute plan thực thi Nếu stored procedure gọi nhiều lần execute plan sử dụng lại nên làm việc nhanh Ngoài cú pháp câu lệnh SQL SQL Sever kiểm tra trước save nên khơng cần kiểm lại thực thi Programming Framework : Một stored procedure tạo sử dụng lại Ðiều làm cho việc bảo trì (maintainability) dễ dàng việc tách rời business rules (tức logic thể bên stored procedure) database Ví dụ có thay đổi mặt logic ta việc thay đổi code bên stored procedure mà Những ứng dụng dùng stored procedure khơng cần phải thay đổi mà tương thích với business rule Cũng giống ngơn ngữ lập trình khác stored procedure cho phép ta đưa vào input parameters (tham số) trả output parameters đồng thời có khả gọi stored procedure khác Security : Giả sử muốn giới hạn việc truy xuất liệu trực tiếp user vào số tables, ta viết stored procedure để truy xuất liệu cho phép user sử dụng stored procedure viết sẵn mà "đụng" đến tables cách trực tiếp Ngồi stored procedure encrypt (mã hóa) để tăng cường tính bảo mật Các Loại Stored Procedure Stored procedure chia thành nhóm sau: System Stored Prcedure : Là stored procedure chứa Master database thường bắt đầu tiếp đầu ngữ sp_ Các stored procedure thuộc loại built-in chủ yếu dùng việc quản lý database (administration) security Ví dụ bạn kiểm tra tất processes sử dụng user DomainName\Administrators bạn dùng sp_who @loginame='DomainName\Administrators' Có hàng trăm system stored procedure SQL Server Bạn xem chi tiết SQL Server Books Online Trang 62 Tài liệu tham khảo SQL Server 2000 Local Stored Procedure : Ðây loại thường dùng Chúng chứa user database thường viết để thực công việc Thơng thường người ta nói đến stored procedure nói đến loại Local stored procedure thường viết DBA programmer Chúng ta bàn cách tạo stored prcedure loại phần Temporary Stored Procedure : Là stored procedure tương tự local stored procedure tồn connection tạo chúng bị đóng lại SQL Server shutdown Các stored procedure tạo TempDB SQL Server nên chúng bị delete connection tạo chúng bị cắt đứt hay SQL Server down Temporary stored procedure chia làm loại : local (bắt đầu #), global (bắt đầu ##) stored procedure tạo trực tiếp TempDB Loại local sử dụng connection tạo chúng bị xóa disconnect, cịn loại global sử dụng connection Permission cho loại global dành cho người (public) thay đổi Loại stored procedure tạo trực tiếp TempDB khác với loại chỗ ta set permission, chúng tồn kể sau connection tạo chúng bị cắt đứt biến SQL Server shut down Extended Stored Procedure : Ðây loại stored procedure sử dụng chương trình ngoại vi (external program) vốn compiled thành DLL để mở rộng chức hoạt động SQL Server Loại thường bắt đầu tiếp đầu ngữ xp_ Ví dụ, xp_sendmail dùng đề gởi mail cho người hay xp_cmdshell dùng để chạy DOS command Ví dụ xp_cmdshell 'dir c:\' Nhiều loại extend stored procedure xem system stored procedure ngược lại Remote Stored Procedure : Những stored procedure gọi stored procedure server khác Viết Stored Procedure Tên thông tin Stored Procedure tạo chứa SysObjects table phần text chứa SysComments table Vì Stored Procedure xem object nên ta dùng lệnh CREATE, ALTER, DROP để tạo mới, thay đổi hay xóa bỏ stored procedure Chúng ta xem ví dụ sau Stored Procedure: Ðể tạo stored procedure bạn dùng Enterprise Manager click lên Stored Procedure -> New Stored Procedure Trong ví dụ ta tạo stored procedure để insert new order vào Orders table Practice DB Ðể insert order vào database ta cần đưa vào số input OrderID, ProductName (order hàng nào) CustomerName (ai order) Sau ta trả kết cho biết việc insert có thành công hay không Result = insert thành công CREATE PROCEDURE AddNewOrder @OrderID smallint, @ProductName varchar(50), @CustomerName varchar(50), Trang 63 Tài liệu tham khảo SQL Server 2000 @Result smallint=1 Output AS DECLARE @CustomerID smallint BEGIN TRANSACTION If not Exists(SELECT CustomerID FROM Customers WHERE [Name]=@CustomerName) This is a new customer Insert this customer to the database BEGIN SET @CustomerID= (SELECT Max(CustomerID) FROM Customers) SET @CustomerID=@CustomerID+1 INSERT INTO Customers VALUES(@CustomerID,@CustomerName) If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID) This order exists and could not be added any more so Roll back BEGIN SELECT @Result=1 ROLLBACK TRANSACTION END Else This is a new order insert it now BEGIN INSERT INTO [Orders] (OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID) SELECT @Result=0 COMMIT TRANSACTION END END Else The customer exists in DB go ahead and insert the order BEGIN If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID) This order exists and could not be added any more so Roll back BEGIN SELECT @Result=1 ROLLBACK TRANSACTION END Else This is a new order insert it now BEGIN INSERT INTO [Orders] (OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID) SELECT @Result=0 COMMIT TRANSACTION END END Print @Result Return Ðể tạo stored procedure ta dùng lệnh CREATE PROCEDURE theo sau tên (nếu temporary stored procedure thêm dấu # trước tên procedure Nếu muốn encrypt dùng WITH ENCRYPTION trước chữ AS) input ouput parameters Nếu output thêm keyword OUTPUT đằng sau parameter Ta cho Trang 64 Tài liệu tham khảo SQL Server 2000 giá trị default lúc với khai báo data type parameter Kể từ sau chữ AS phần body stored procedure Trong ví dụ trước hết ta khai báo biến @CustomerID sau bắt đầu transaction BEGIN TRANSACTION (tồn cơng việc insert thực Transaction nghĩa là insert thành công khơng làm cả- all or nothing) Trước hết ta kiểm tra xem người khách hàng người hay cũ Nếu người ta "tiện tay" insert vào Customers table ln cịn khơng insert vào Orders table mà Nếu người customer ta lấy CustomerID lớn từ Customers table bỏ vào biến @CustomerID sau tăng lên đơn vị dùng cho việc Insert Customer dòng Sau insert người customer ta tiếp tục công việc việc kiểm tra xem Order muốn insert có tồn chưa (vì order tồn insert SQL Server báo lỗi OrderID Primary key) Nếu order lý có DB ta roll back trả kết =1 cịn khơng ta insert order vào commit transaction với kết trả =0 Tương tự người customer tồn (sau chữ else đầu tiên) ta việc insert order giống Trong trường hợp kể ta in kết return Ví dụ mang tính học hỏi cịn thực tế database phức tạp nhiều nên việc viết stored procedure đòi hỏi kiến thức vững SQL kỹ programming Muốn hiểu rõ học bạn cần làm tập số Tóm lại tìm hiểu số kỹ thuật import export data Ðồng thời biết qua cách select data từ database system khác dùng distributed query Nhưng quan trọng thường dùng stored procedures Bạn cần hiểu rõ vai trò stored procedure biết cách tạo chúng Vì kiến thức database nói chung SQL Server nói riêng rộng nên khuôn khổ học trình bày cặn kẽ chi tiết đơi có dồn ép bạn cần đọc đọc lại nhiều lần để nắm ý phải xem thêm sách (nếu khơng có sách phải xem thêm SQL Books Online) Sau học bạn cần làm tập số để hệ thống hóa lại kiến thức học Khi làm tập nên làm theo thứ tự tuân thủ theo yêu cầu tập đặt Không nên bỏ qua bước Triggers And Views Ðể đọc hiểu viết bạn nên đọc qua Bài 6: Stored Procedure And Advanced T-SQL Trang 65 Tài liệu tham khảo SQL Server 2000 Trong tìm hiểu ứng dụng loại stored procedure đặc biệt gọi Triggers dùng Views để thể data hay nhiều table Triggers Trigger loại stored procedure đặc biệt execute (thực thi) cách tự động có data modification event xảy Update, Insert hay Delete Trigger dùng để đảm bảo Data Integrity hay thực business rules Khi ta cần sử dụng Trigger: Ta sử dụng trigger mà biện pháp bảo đảm data intergrity khác Constraints thỏa mãn yêu cầu ứng dụng Nên nhớ Constraint thuộc loại Declarative Data Integrity kiểm tra data trước cho phép nhập vào table Trigger thuộc loại Procedural Data Integrity nên việc insert, update, delete xảy kích hoạt trigger Chính mà ta cần cân nhắc trước định dùng loại việc đảm bảo Data Integrity Khi database denormalized (ngược lại trình normalization, trình thiết kế database schema cho database chứa data không thừa không thiếu) có số data thừa (redundant ) chứa nhiều tables Nghĩa có số data chứa lúc hai hay nhiều nơi khác Khi để đảm bảo tính xác data update table phải update cách tự động table cịn lại cách dùng Trigger Ví dụ: ta có table Item có field Barcode dùng để xác định mặt hàng Item table có vai trị catalog chứa thơng tin cần thiết mơ tả mặt hàng Ta có table khác Stock dùng để phản ánh hàng có thực kho nhập cung cấp đại lý nào, số lượng (tức thơng tin hàng mà chứa Item table được) table có field Barcode để xác định hàng kho Như thông tin Barcode chứa hai nơi khác ta cần dùng trigger để đảm bảo Barcode hai nơi synchonize (đồng bộ) Ðơi ta có nhu cầu thay đổi dây chuyền (cascade) ta dùng Trigger để bảo đảm chuyện Nghĩa có thay đổi table số table khác thay đổi theo để đảm bảo tính xác Ví dụ hàng bán số lượng hàng table Item giảm đồng thời tổng số hàng kho (Stock table) phải giảm theo cách tự động Như ta tạo trigger Item table để bán trigger kích hoạt giảm tổng số hàng Stock table Trang 66 Tài liệu tham khảo SQL Server 2000 Ðặc điểm Trigger: Một trigger làm nhiều cơng việc (actions) khác kích hoạt nhiều event Ví dụ ta viết trigger kích hoạt event Update, Insert hay Delete bên trigger ta viết code để giải cho trường hợp Trigger tạo temporary hay system table Trigger kích hoạt cách tự động event Insert, Update, Delete mà chạy manually Có thể áp dụng trigger cho View Khi trigger kích hoạt data vừa insert hay vừa thay đổi chứa Inserted table data vừa delete chứa Deleted table Ðây table tạm chứa memory có giá trị bên trigger mà thơi (nghĩa nhìn thấy query trigger mà thơi) Ta dùng thông tin table để so sánh data cũ kiểm tra xem data vừa thay đổi có hợp lệ trước commit hay roll back (Xem thêm ví dụ bên dưới) Có loại triggers (class) : INSTEAD OF AFTER Loại INSTEAD OF bỏ qua (bybass) action kích hoạt trigger mà thay vào thực dịng lệnh SQL bên Trigger Ví dụ ta có Update trigger table với câu INSTEAD OF table update thay update SQL Server thực lệnh viết sẵn bên trigger Ngược lại loại AFTER (loại default tương đương với keyword FOR) thực câu lệnh bên trigger sau action tạo nên trigger xảy Tạo Một Trigger Như Thế Nào? Cú pháp để tạo trigger có dạng sau: CREATE TRIGGER trigger_name ON table_name or view_name FOR trigger_class and trigger_type(s) AS Transact-SQL statements Như tạo trigger ta phải rõ tạo trigger table trigger (insert, update hay delete Sau chữ AS câu lệnh SQL xử lý công việc Ta nghiên cứu ứng dụng thực tiễn sau Giả sử ta viết application cho phép user Insert, Update Delete thông Trang 67 Tài liệu tham khảo SQL Server 2000 tin nằm database User thường người không thông thạo computer mà thường gọi đùa "bà tám" Vào ngày đẹp trời, "bà tám" mặt mày tái xanh đến cầu cứu ta lỡ tay "delete" thơng tin quan trọng hy vọng ta phục hồi liệu dùm Nếu khơng phịng xa trước viết application coi vơ phương cứu chữa data hồn tồn bị delete Nhưng bạn "guru" bạn gật gù "chuyện khó lắm!" sau bạn tốn vài phút đồng hồ để rollback Muốn làm chuyện phải dùng "chiêu" gọi Audit (kiểm tra hay giám sát) Tức ngồi table ta thêm table phụ gọi Audit tables Bất kỳ hoạt động đụng chạm vào số table quan trọng database ta ghi nhận vào Audit table Ví dụ user update hay delete record table trước update hay delete ta âm thầm di chuyển record sang Audit table update hay delete table Như có chuyện xảy ta dễ dàng rollback (trả record chỗ cũ) Ví dụ: Ta có table Orders PracticeDB Ðể audit hoạt động diễn table ta tạo audit table với tên Aud_Orders với column giống y hệt với Orders table Ngoài ta thêm vào columns : Audit_Type : với giá trị 'I','U','D' để ghi nhận record Insert, Update hay Delete Date_Time_Stamp : Data Type thuộc loại DateTime dùng để ghi nhận thời điểm xảy thay đổi, có vai trị dấu (Nếu mơi trường nhiều user ta thêm column UserID để ghi nhận user thay đổi) Sau ta tạo trigger dùng cho việc audit sau: Insert Trigger CREATE TRIGGER [AuditInsertOrders] ON [dbo].[Orders] FOR Insert AS insert into aud_orders select *,'I',getdate() From inserted Update Trigger CREATE TRIGGER [AuditUpdateOrders] ON [dbo].[Orders] for UPDATE AS insert into aud_orders select *,'U',Getdate() from deleted Delete Trigger CREATE TRIGGER [AuditDeleteOrders] ON [dbo].[Orders] FOR DELETE AS insert into aud_orders select *,'D',getdate() From deleted Trang 68 Tài liệu tham khảo SQL Server 2000 Trong ví dụ user insert record record vừa insert nằm inserted table trình bày phần Do ta select tất column inserted table cộng thêm Audit Type "I" dùng hàm GetDate() SQL Server để lấy system date time dùng cho Date_Time_Stamp column, sau insert vào Aud_Orders table Tương tự với trường hợp Update Delete, record update hay delete nằm deleted table Như trở lại trường hợp thí dụ "bà tám" u cầu ta vào tìm kiếm audit table để phục hồi lại record Ngoài ta dùng table để tìm thủ phạm xoá hay sửa chữa data cần thiết Ðể tạo hay xem trigger Enterprise Manager bạn làm sau: Right-Click lên table mà bạn muốn tạo trigger->All Tasks-> Manage Triggers Lưu ý: Ðôi Khi ta muốn trigger thực hoạt động hay vài column Update khơng phải column Khi ta dùng hàm Update(Column_Name) để kiểm tra xem column có bị update hay khơng Ví dụ: Tạo trigger cho Customer table Bên Trigger (sau chữ AS) ta kiểm tra xem column First_Name hay Last_Name bị thay đổi hành động khơng khơng làm IF UPDATE (first_name) OR UPDATE (Last_Name) BEGIN Do some conditional processing when either of these columns are updated END Nếu muốn kiểm tra nhiều columns ta dùng hàm khác Columns_Updated() Xin xem thêm SQL Server Books Online để biết thêm chi tiết cách sử dụng Views Ðịnh nghĩa cách đơn giản view SQL Server tương tự Query Access database View xem table ảo mà data select từ stored query Ðối với programmer view khơng khác chi so với table đặt vị trí table câu lệnh SQL Ðặc điểm View ta join data từ nhiều table trả recordset đơn Ngồi ta "xào nấu" data (manipulate data) trước trả cho user cách dùng số logic checking (if, case ) Ví dụ: Create View OrderReport Trang 69 Tài liệu tham khảo SQL Server 2000 As Select OrderID, (case when [Name] is null then 'New Customer' else [Name] end )As CustomerName, ProductName, DateProcessed From Customers Right Outer Join Orders on Customers.CustomerID=Orders.CustomerID Trong ví dụ ta chủ yếu trả data từ Orders table PracticeDB thay display CustomerID vốn khơng có ý nhiều ý nghĩa user ta display tên customer cách join với Customer table Nếu Customer Name Null nghĩa tên customer đặt order không tồn system Thay để Null ta display "New Customer" để dễ nhìn cho user Nói chung câu lệnh SQL View từ đơn giản select toàn data từ table phức tạp với nhiều tính programming T-SQL View Thường Ðược Dùng Vào Việc Gì? View thường sử dùng vào số công việc sau: Tập trung vào số data định : ta thường dùng view để select số data mà user quan tâm hay chịu trách nhiệm loại bỏ data không cần thiết Ví dụ: Giả sử table ta có column "Deleted" với giá trị True hay False để đánh dấu record bị delete hay không Việc dùng cho việc Audit Nghĩa ứng dụng user delete record đó, thay ta physically delete record ta logically delete cách đánh dấu record "Deleted" để đề phòng user yêu cầu roll back Như chủ yếu ta quan tâm đến data chưa delete data đánh dấu deleted để ý cần roll back hay audit mà thơi Trong trường hợp ta tạo view select data mà Deleted=False làm việc chủ yếu view thay tồn table Ðơn giản hóa việc xử lý data: Ðơi ta có query phức tạp sử dụng thường xuyên ta chuyển thành View đối xử table, làm cho việc xử lý data dễ dàng Customize data: Ta dùng view để làm cho users thấy data từ góc độ khác họ dùng nguồn data giống Ví dụ: Ta tạo views thơng tin customer thể khác tùy login ID normal user hay manager Trang 70 Tài liệu tham khảo SQL Server 2000 Export Import data: Ðôi ta muốn export data từ SQL Server sang ứng dụng khác Excel chẳng hạn ta dùng view để join nhiều table export dùng bcp Khi sử dụng view ta select,insert, update, delete data bình thường với table Ví dụ: Select * From OrderReport Where DateProcessed