Giáo trình Quản trị và phát triển ứng dụng với Microsoft SQL Server
MỤC LỤC
MỤC LỤC 2
MỞ ĐẦU 5
PHẦN I. QUẢN TRỊ SQL SERVER 6
BẮT ĐẦU VỚI SQL SERVER 6
TÌM HIỂU VỀ HỆ QUẢN TRỊ CSDL SQL SERVER 6
MÔ HÌNH HOẠT ĐỘNG CỦA SQL SERVER TRÊN MẠNG MÁY TÍNH. 8
CÁC THÀNH PHẦN CỦA SQL SERVER. 12
CÁC THÀNH PHẦN CỦA SQL SERVER. 13
CÀI ĐẶT SQL SERVER. 15
QUẢN TRỊ SERVER 24
INSTANCE 24
ĐIỀU KHIỂN CÁC DỊCH VỤ CỦA SQL SERVER. 24
QUẢN TRỊ SERVER. 28
THIẾT LẬP KẾT NỐI ĐẾN SERVER. 29
CẤU HÌNH KẾT NỐI MẠNG CỦA SERVER. 39
QUẢN TRỊ CÁC CLIENT. 40
QUẢN TRỊ CƠ SỞ DỮ LIỆU 47
CẤU TRÚC CƠ SỞ DỮ LIỆU. 47
QUẢN LÝ CƠ SỞ DỮ LIỆU. 52
BẢNG DỮ LIỆU – TABLE 60
CÁC CHUẨN TẮC. 60
THIẾT KẾ BẢNG DỮ LIỆU. 62
TẠO BẢNG DỮ LIỆU. 71
KHÓA INDEX 79
THIẾT KẾ KHÓA INDEX. 79
TẠO KHÓA INDEX. 81
XÓA INDEX. 83
KHUNG NHÌN – VIEW 84
KHÁI NIỆM KHUNG NHÌN. 84
TẠO KHUNG NHÌN. 84
SỬ DỤNG VIEW. 86
THỦ TỤC LƯU TRỮ 88
KHÁI NIỆM THỦ TỤC LƯU TRỮ VÀ HÀM. 88
PHÂN LOẠI THỦ TỤC LƯU TRỮ. 89
THIẾT LẬP THỦ TỤC LƯU TRỮ. 90
SỬA, XÓA THỦ TỤC 97
TRIGGER 98
KHÁI NIỆM TRIGGER. 98
NHỮNG TRƯỜNG HỢP SỬ DỤNG TRIGGER. 98
ĐẶC ĐIỂM CỦA TRIGGER. 98
TẠO TRIGGER. 99
SỬA, XÓA TRIGGER. 103
XUẤT – NHẬP DỮ LIỆU 104
SERVER LIÊN KẾT – LINKED SERVER. 104
SỬ DỤNG BCP VÀ BULK INSERT NHẬP DỮ LIỆU. 112
DETTACH VÀ ATTACH CƠ SỞ DỮ LIỆU. 115
IMPORT VÀ EXPORT CƠ SỞ DỮ LIỆU. 117
EXPORT – XUẤT DỮ LIỆU. 121
SAO LƯU, KHÔI PHỤC DỮ LIỆU 122
NHỮNG LÝ DO PHẢI SAO LƯU VÀ KHÔI PHỤC DỮ LIỆU. 122
CÁC LOẠI BACKUP. 122
CÁC MÔ HÌNH PHỤC HỒI DỮ LIỆU. 123
SAO LƯU CƠ SỞ DỮ LIỆU - BACKUP DATABASE. 124
KHÔI PHỤC DỮ LIỆU – RESTORE DATABASE. 125
CHƯƠNG X. PHÂN QUYỀN, BẢO MẬT 127
CHẾ ĐỘ BẢO MẬT – SECURITY MODE. 127
SERVER ROLE, DATABASE ROLE. 129
QUẢN TRỊ NGƯỜI DÙNG. 133
NHÂN BẢN DỮ LIỆU 135
GIỚI THIỆU VỀ NHÂN BẢN DỮ LIỆU. 135
CẤU HÌNH PUBLISHER VÀ DISTRIBUTOR. 141
TẠO PUBLICATION. 143
TẠO PUSH SUBSCRIPTION. 145
TẠO PULL SUBSCRIPTION. 147
THỰC HIỆN ĐỒNG BỘ DỮ LIỆU. 149
PHẦN II. CÂU LỆNH T-SQL 150
ĐỊNH NGHĨA DỮ LIỆU (DATA DEFINITION LAGUAGE - DDL). 150
THAO TÁC VỚI DỮ LIỆU (DATA MANIPULATION LANGUAGE - DML). 155
TRUY VẤN DỮ LỆU. 167
TẠO BẢNG BẰNG LỆNH SELECT INTO. 175
LỆNH COMPUTE BY. 175
TOÁN TỬ UNION. 176
TRUY VẤN DỮ LIỆU TỪ NHIỀU BẢNG. 177
TRUY VẤN TỔNG HỢP. 185
TRUY VẤN LỒNG NHAU. 188
UPDATE, DELETE, INSERT VỚI LỆNH TRUY VẤN LỒNG NHAU. 191
LỆNH READTEXT – ĐỌC TEXT, IMAGE. 192
THAO TÁC DỮ LIỆU NGOÀI. 192
MỘT SỐ HÀM CƠ BẢN. 195
TRANSACTION – PHIÊN GIAO DỊCH. 201
LOCKING – KHÓA. 205
GRAND – GÁN QUYỀN. 208
REVOKE – TƯỚC QUYỀN. 213
DENY – TỪ CHỐI QUYỀN. 213
TRỢ GIÚP. 214
PHẦN III. PHÁT TRIỂN ỨNG DỤNG VỚI SQL SERVER 215
GIỚI THIỆU. 215
KẾT NỐI VỚI SQL SERVER BẰNG ADO. 215
KẾT NỐI VỚI SQL SERVER BẰNG SQL-DMO. 235
Then cn.CommitTrans Else cn.RollbackTrans End If Thực hiện các lệnh DDL. Để thực hiện các lệnh DDL như CREATE TABLE, DROP TABLE, ALTER TABLE. Bạn có thể sử dụng đối tượng command của ADO, xét ví dụ sau: Dim Cn As New ADODB.Connection Dim Cmd As New ADODB.Command ' If the ADOTestTable does not exist, go to AdoError. On Error GoTo AdoError ' Connect using the SQLOLEDB provider. cn.Provider = "sqloledb" cn.Properties("Data Source").Value = "MyServerName" cn.Properties("Initial Catalog").Value = "northwind" cn.Properties("Integrated Security").Value = "SSPI" cn.Open ' Set up command object. Set Cmd.ActiveConnection = Cn Cmd.CommandText = "DROP TABLE ADOTestTable" Cmd.CommandType = adCmdText Cmd.Execute Done: Cmd.CommandText = "SET NOCOUNT ON" Cmd.Execute Cmd.CommandText = "CREATE TABLE ADOTestTable (id int, name char(100))" Cmd.Execute Cmd.CommandText = "INSERT INTO ADOTestTable values(1, 'Jane Doe')" Cmd.Execute Cn.Close Exit Sub AdoError: Dim errLoop As Error Dim strError As String ' Enumerate Errors collection and display properties of ' each Error object. Set Errs1 = Cn.Errors For Each errLoop In Errs1 Debug.Print errLoop.SQLState Debug.Print errLoop.NativeError Debug.Print errLoop.Description Next GoTo Done End Sub Quản lý dữ liệu kiểu lớn – Text, image. Dữ liệu kiểu text, ntext, image là kiểu dữ liệu phức tạp, việc quản lý, khai thác không được thực hiện thông thường, ADO hỗ trợ các phương thức riêng để thực hiện. Thay vì độc, cập nhật dữ liệu trực tiếp thì dữ liệu kiểu này được thao tác theo đoạn (chunk) bằng cách sử dụng các phương thức AppendChunk, GetChunk. Trước khi thực hiện bạn phải đặt tham số bằng cách thực hiện lệnh sau: EXEC sp_dboption 'pubs', 'Select into/bulkcopy', 'True' Xét ví dụ sau trên CSDL Pubs: - Copy bảng pub_info sang bảng mới USE pubs SELECT * INTO pub_info_x FROM pub_info GO - Thực hiện chèn dữ liệu vào bảng: Public Sub AppendChunkX() Dim cn As ADODB.Connection Dim rstPubInfo As ADODB.Recordset Dim strCn As String Dim strPubID As String Dim strPRInfo As String Dim lngOffset As Long Dim lngLogoSize As Long Dim varLogo As Variant Dim varChunk As Variant Const conChunkSize = 100 ' Open a connection. Set cn = New ADODB.Connection strCn = "Server=srv;Database=pubs;UID=sa;Pwd=;" cn.Provider = "sqloledb" cn.Open strCn 'Open the pub_info_x table. Set rstPubInfo = New ADODB.Recordset rstPubInfo.CursorType = adOpenDynamic rstPubInfo.LockType = adLockOptimistic rstPubInfo.Open "pub_info_x", cn, , , adCmdTable 'Prompt for a logo to copy. strMsg = "Available logos are : " & vbCr & vbCr Do While Not rstPubInfo.EOF strMsg = strMsg & rstPubInfo!pub_id & vbCr & _ Left(rstPubInfo!pr_info, InStr(rstPubInfo!pr_info, ",") - 1) & vbCr & vbCr rstPubInfo.MoveNext Loop strMsg = strMsg & "Enter the ID of a logo to copy:" strPubID = InputBox(strMsg) ' Copy the logo to a variable in chunks. rstPubInfo.Filter = "pub_id = '" & strPubID & "'" lngLogoSize = rstPubInfo!logo.ActualSize Do While lngOffset < lngLogoSize varChunk = rstPubInfo!logo.GetChunk(conChunkSize) varLogo = varLogo & varChunk lngOffset = lngOffset + conChunkSize Loop ' Get data from the user. strPubID = Trim(InputBox("Enter a new pub ID:")) strPRInfo = Trim(InputBox("Enter descriptive text:")) ' Add a new record, copying the logo in chunks. rstPubInfo.AddNew rstPubInfo!pub_id = strPubID rstPubInfo!pr_info = strPRInfo lngOffset = 0 ' Reset offset. Do While lngOffset < lngLogoSize varChunk = LeftB(RightB(varLogo, lngLogoSize - _ lngOffset),conChunkSize) rstPubInfo!logo.AppendChunk varChunk lngOffset = lngOffset + conChunkSize Loop rstPubInfo.Update ' Show the newly added data. MsgBox "New record: " & rstPubInfo!pub_id & vbCr & _ "Description: " & rstPubInfo!pr_info & vbCr & _ "Logo size: " & rstPubInfo!logo.ActualSize rstPubInfo.Close cn.Close End Sub Kết nối từ ASP. Trong ác ví dụ saiu đây thực hiện làm việc với SQL Server từ ASP, sử dụng ngôn ngữ lập trình VBScript, để làm được ví dụ này bạn đọc phải có kiến thức về thiết kế Web site (HTML). Thiết kế form kết nối: Login SQL Server example <!-- .style1 { font-size: 24px; font-weight: bold; } --> Login SQL Server User name Password Server name sub cmdLogin_Onclick frmlogin.method="post" frmlogin.action="connect.asp" frmlogin.submit end sub Tập tin connect.asp: Là tập tin được gọi từ form login.asp, thực hiện nhận tham số của form login.asp, kết nối đến SQL Server. <% dim username, password, servername, txt username=request.Form("txtUser") password = request.Form("txtPassword") servername=request.Form("txtServer") txt= "Provider=SQLOLEDB; " txt=txt & " Data Source=" & servername & ";" txt=txt & " Initial Catalog=pubs; " txt=txt & " User ID=" & username & ";" txt=txt & " PWD=" & password Set cn=Server.CreateObject("ADODB.Connection") cn.Open txt %> Kết nối thành công <% cn.close %> Liệt kê danh sách. Để liệt kê danh sách (có thể lấy dữ liệu bằng cách truy vấn trực tiếp hoặc thông qua khung nhìn - view) trước hết phải tạo một recordset lưu trữ kết quả truy vấn, từ recordset ta có thể lấy dữ liệu và đặt vào vị trí tương ứng cần thiết. + Khai báo Recordset: Set rs=Server.CreateObject("ADODB.Recordset") rs.ActiveConnection =cn rs.Source ="Select * from Authors" rs.Open + Lấy giá trị: Rs.fields(“au_id”) + Đóng Recordset: Rs.close + Ví dụ liệt kê danh sách bằng cách truy vấn trực tiếp: Danh sach <!-- .style5 { font-family: Arial, Helvetica, sans-serif; font-weight: bold; font-size: 14px; } .style6 {font-family: Arial, Helvetica, sans-serif} .style7 { font-size: 14px; font-weight: bold; } .style9 {font-family: Arial, Helvetica, sans-serif; font-size: 14px; } .style12 {font-size: 12px} --> <% dim username, password, servername, txt username="sa" password = "" servername="TDCong" txt= "Provider=SQLOLEDB; " txt=txt & " Data Source=" & servername & ";" txt=txt & " Initial Catalog=pubs; " txt=txt & " User ID=" & username & ";" txt=txt & " PWD=" & password Set cn=Server.CreateObject("ADODB.Connection") cn.Open txt Set rs=Server.CreateObject("ADODB.Recordset") rs.ActiveConnection =cn rs.Source ="Select * from Authors" rs.Open %> LIST OF AUTHORS No au_id au_lname au_fname phone address city <% i=0 do while not rs.eof and not rs.bof i=i+1 if i mod 20 then %> <% else %> <% end if rs.movenext loop %> <% rs.close %> KẾT NỐI VỚI SQL SERVER BẰNG SQL-DMO. SQL DMO viết tắt của cụm từ SQL Distributed Management Objects, sử dụng thư viện liên kết động (dll) để kết nối đến SQL Server. SQL DMO thực hiện liên kết nhúng (OLE Automation ), các đối tượng SQL Server được thực hiện nhúng các đối tượng của SQL Server vào ứng dụng, khai thác các đối tượng thông qua thuộc tính, sự kiện và các phương thức làm việc của nó. SQL DMO hỗ trợ phát triển ứng dụng từ ngôn ngữ lập trình Visual Basic, C++, khi đóng gói các thư viện liên kết động sẽ được đóng gói cùng, cài dặt ứng dụng thư viện sẽ được cài đặt trong Windows, nên khi chạy ứng dụng bạn không cần thiết lập môi trường Client Connectivity. Các tập tin cơ bản cho SQL DMO: sqldmo.dll, sqldmo80.hlp, sqldmo.rll, sqldmo.h (C++), sqldmoid.h (C++), sqldmo.sql. Trong phần này sẽ giới thiệu kỹ thuật thiết kế ứng dụng từ Visual Basic 6.0. Khai báo thư viện trong project. - Vào menu Project -> References - Chọn Microsoft SQL DMO Object Library -> Ok Khai báo đối tượng. Sau khi thực hiện khai báo thư viện trong project, ta có thể khai báo biến kiểu đối tượng (object) hoặc kiểu đối tượng của SQL DMO. Ví dụ khai báo biến kiểu SQL Server: Dim oSQLServer As SQLDMO.SQLServer Kết nối đến SQL Server. Để kết nối đến SQL Server ta sử dụng phương thức kết nối của đối tượng SQL Server, có 3 tham số Servername, LoginName, Pasword. Dim oSQLServer As SQLDMO.SQLServer Set oSQLServer = New SQLDMO.SQLServer oSQLServer.Connect "ServerName", "LoginName", "Pasword" Thực hiện lại kết nối: Trong nhiều trường hợp bạn muốn ngắt kết nối hiện tại và thực hiện lại kết nối để lấy trạng thái SQL Server hiện thời (tương tự động tác làm tươi – Reresh). oSQLServer.DisConnect oSQLServer.ReConnect Làm việc với các đối tượng. SQL DMO tạo đối tượng kế thừa từ những đối tượng con của nó, ví dụ SQL Server kế thừa từ các đối tượng Database <- Table <- Column,… Xác định biến với CSDL: Dim oDatabase as new SQLDMO.Database Set oDatabase = oSQLServer.Databases("Northwind") Lấy danh sách tên các CSDL vào hộp thoại: Dim nDatabase as Integer For nDatabase = 1 to oSQLServer.Databases.Count Combo1.AddItem oSQLServer.Databases(nDatabase).Name Next nDatabase Các đối tượng đều được kế thà từ các đối tượng con, các đối tượng con tạo thành một tập hợp, tập hợp nói trên có thể thực hiện các phương thức Add, Remove,…với từng đối tượng. Ví dụ remove bảng khỏi CSDL: oServer.Databases("Northwind").Tables.Remove("Orders", "anne") Thực hiện lệnh SQL: Các đối tượng (SQL Server, Database) có thể thực hiện các lệnh SQL thông qua các phương thức ExecuteImmediate và ExecuteWithResults. Ví dụ thực hiện lệnh thao tác: oSQLServer.ExecuteImmediate “Create Database Example” Ví dụ thực hiện lệnh truy vấn: Dim rs As QueryResults Set rs = oDatabase.ExecuteWithResults("Select * from Authors") Ví dụ lấy dữ liệu từ một truy vấn: For i = 1 To rs.Rows For j = 1 To rs.Columns MsgBox rs.GetColumnString(i, j) Next j Next i Các phương thức thực hiện kết nối có thể hỗ trợ theo từng ngôn ngữ lập trình, hỗ trợ nhiều trong việc lập trình từ Visual Basic, ASP, C, C++. Bạn có thể tham khảo các ví dụ trong thư mục Sample của SQL Server. Các ví dụ sẽ đề cập nhiều ngôn ngữ lập trình, nhiều sự kiện khác nhau.
File đính kèm:
- Giáo trình Quản trị và phát triển ứng dụng với Microsoft SQL Server.doc