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

