SQL Server 2000 là một hệ thống quản lý cơ sở dữ liệu (Relational Database
Management System (RDBMS) ) sử dụng Transact-SQL để trao đổi dữ liệu giữa
Client computer và SQL Server computer. Một RDBMS bao gồm databases,
database engine và các ứng dụng dùng để quản lý dữ liệu và các bộ phận khác
nhau trong RDBMS.
SQL Server 2000 được tối ưu để có thể chạy trên môi trường cơ sở dữ liệu rất
lớn (Very Large Database Environment) lên đến Tera-Byte và có thể phục vụ
cùng lúc cho hàng ngàn user. SQL Server 2000 có thể kết hợp "ăn ý" với các
server khác như Microsoft Internet Information Server (IIS), E-Commerce
Server, Proxy Server.
61 trang |
Chia sẻ: thiennga98 | Lượt xem: 741 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình Tin học - Học SQL server 2000, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
processing when either of these
columns are updated.
END
Nếu muốn kiểm tra nhiều columns ta có thể dùng hàm khác là
Columns_Updated() . Xin xem thêm trong SQL Server Books Online để biết
thêm chi tiết về cách sử dụng.
Views
Ðịnh nghĩa một cách đơn giản thì view trong SQL Server tương tự như Query
trong Access database. View có thể được xem như một table ảo mà data của nó
được select từ một stored query. Ðối với programmer thì view không khác chi so
với table và có thể đặt ở vị trí của table trong các câu lệnh SQL. Ðặc điểm của
View là ta có thể join data từ nhiều table và trả về một recordset đơn. Ngoài ra
ta có thể "xào nấu" data (manipulate data) trước khi trả về cho user bằng cách
dùng một số logic checking như (if, case...).
Ví dụ:
Create View OrderReport
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
HỌC SQL SERVER 2000 56
Trong ví dụ trên ta chủ yếu trả về data từ Orders table trong PracticeDB nhưng
thay vì display CustomerID vốn không có ý nhiều ý nghĩa đối với user ta sẽ
display tên của customer bằng cách join với Customer table. Nếu Customer
Name là Null nghĩa là tên của customer đã đặt order không tồn tại trong system.
Thay vì để Null ta sẽ display "New Customer" để dễ nhìn hơn cho user.
Nói chung câu lệnh SQL trong View có thể từ rất đơn giản như select toàn bộ
data từ một table cho đến rất phức tạp với nhiều tính năng programming của T-
SQL.
View Thường Ðược Dùng Vào Việc Gì?
View thường được sử dùng vào một số công việc sau:
• Tập trung vào một số data nhất định : ta thường dùng view để
select một số data mà user quan tâm hay chịu trách nhiệm và loại
bỏ những data không cần thiết.
Ví dụ: Giả sử trong table ta có column "Deleted" với giá trị là True hay
False để đánh dấu một record bị delete hay không. Việc này đôi khi
được dùng cho việc Audit. Nghĩa là trong một ứng dụng nào đó khi
user delete một record nào đó, thay vì ta physically delete record ta
chỉ logically delete bằng cách đánh dấu record là đã được "Deleted" để
đề phòng user yêu cầu roll back. Như vậy chủ yếu ta chỉ quan tâm đến
data chưa delete còn data đã được đánh dấu deleted chỉ được để ý khi
nào cần roll back hay audit mà thôi. Trong trường hợp này ta có thể
tạo ra một view select data mà Deleted=False và làm việc chủ yếu
trên view thay vì toàn bộ table.
• Ðơn giản hóa việc xử lý data: Ðôi khi ta có những query rất
phức tạp và sử dụng thường xuyên ta có thể chuyển nó thành View
và đối xử nó như một table, như vậy sẽ làm cho việc xử lý data dễ
dàng hơn.
•
• Customize data: Ta có thể dùng view để làm cho users thấy data
từ những góc độ khác nhau mặc dù họ đang dùng một nguồn data
giống nhau. Ví dụ: Ta có thể tạo ra views trong đó những thông tin
về customer được thể hiện khác nhau tùy login ID là normal user
hay manager.
•
• Export và Import data: Ðôi khi ta muốn export data từ SQL
Server sang các ứng dụng khác như Excel chẳng hạn ta có thể
dùng view để join nhiều table và export dùng bcp.
HỌC SQL SERVER 2000 57
Khi sử dụng view ta có thể select,insert, update, delete data bình thường như với
một table.
Ví dụ:
Select * From OrderReport
Where DateProcessed <'2003-01-01'
Lưu ý: Trong Enterprise Edition (và Developer Edition) ta có thể tạo Index cho
View như cho table. Index sẽ được bàn đến trong các bài sau.
Muốn hiểu rõ hơn về bài học này bạn cần làm bài tập số 3.
Như vậy trong bài này chúng ta đã tìm hiểu Trigger, View trong SQL Server và
một số ứng dụng của nó. Nói chung view thường được dùng để trừu tượng hóa
(abstract) hay lọc raw data (data thô) trước khi trả về cho user trong khi trigger
thường được dùng để bảo đảm tính integrity của database.
Exercise 1: Advanced Query
Please follow those steps to practise:
1. Create a new database called PracticeDB (using Enterprise Manager (EP) or
Query Analyser (QA))
2. Create 2 tables and insert data as follows (use EP or QA) :
Customers
CustomerID
(Int)
Name
(nVarChar(50))
1 John Nguyen
2 Bin Laden
3 Bill Clinton
4 Thomas Hardy
5 Ana Tran
6 Bob Carr
Orders
OrderID
(Int)
CustomerID
(Int)
ProductName
(nvarchar(50))
DateProcessed
(datetime)
1 2 Nuclear Bomb ‘2002-12-01’
2 3 Missile ‘2000-03-02’
3 2 Jet-1080 ‘2003-08-03’
4 1 Beers ‘2001-05-12’
5 4 Asian Food ‘2002-10-04’
6 7 Wine ‘2002-03-08’
HỌC SQL SERVER 2000 58
7 8 Milk ‘2002-05-02’
3. Query data using Select statement with the following Join (use QA)
a. Inner Join
b. Left Outter Join
c. Right Outer Join
d. Full Outer Join
e. Cross Join
The result of the query must be displayed in the following format
( Hints: Based on the data supplied and your knowledge about various kind of joins
guess the results then after each select compare it with your guessing to check if what
you understand is correct. You also use As keyword or alias in the queries)
4. Using “Select * Into...From” statement to create a new table called “Processed
Orders” and populate the new table with the data selecting from Orders table
Where DateProcessed is earlier than ‘2002-10-05’. (use QA)
5. Using “Insert Into...Select” statement to get the top 1 record from “Orders” table
and insert into the “ProcessedOrders” (use QA)
6. Delete a record from ProcessedOrders where the date processed is ‘2002-10-04’.
(use QA)
7. Using Union to merge the two data set from Orders and ProcessedOrders into one
data set. (use QA)
8. Apply Constraints (use EP or QA)
a.Apply the Primary Constraint to the “ID” column in the tables
b. Apply the Foreign Key Constraint in the Orders table.
c. Apply the Check Constraint to the DateProcessed column so that the date is
within ‘1970-01-01’ – ‘2005-01-01’ and try to insert invalid data to see if SQL
rejects.
d. Apply Unique Constraint to the CustomerName column of Customers
9. Back up database and Restore to somewhere else (on a different server or on the
same server but with different database name) (use EP or QA)
10. Truncate and Drop the ProcessedOrders table (use QA)
OrderID CustomerName ProductName DateProcessed
HỌC SQL SERVER 2000 59
Exercise 2: Manipulate Data and Stored Procedure
Please follow those steps to practise:
9. Use bcp to export all data from Orders table of PracticeDB to c:\Orders.txt (or to
c:\Orders.csv)
10. Change some data in the c:\Orders.txt and save. Then import to Orders table from
the text file using bcp
11. Import Orders.txt to Orders table using BULK INSERT
12. Create a Linked Server ‘LinkedPracticeDB’ which link to an Access database
‘PracticeDB.mdb’ (firstly you have to create an Access database similar to
PracticeDB in SQL Server and input some data). Then do a select data using four-
part name and OPENQUERY
13. Using ad hoc computer name with OPENROWSET and
OPENDATASOURCE functions to select data from ‘PracticeDB.mdb’
14. Create the following Cursor
DECLARE @au_lname varchar(40), @au_fname varchar(20)
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 = 0
BEGIN
PRINT 'Author:' + @au_fname + ' ' + @au_lname
FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor
15. Create the following stored procedure and try to execute with some values
CREATE PROCEDURE AddNewOrder
@OrderID smallint,
@ProductName varchar(50),
@CustomerName varchar(50),
@Result smallint=1 Output
AS
DECLARE @CustomerID smallint
BEGIN TRANSACTION
If not Exists(SELECT CustomerID FROM Customers WHERE
[Name]=@CustomerName)
BEGIN
HỌC SQL SERVER 2000 60
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)
BEGIN
SELECT @Result=1
ROLLBACK TRANSACTION
END
Else
BEGIN
INSERT INTO
[Orders](OrderID,ProductName,CustomerID)
VALUES(@OrderID,@ProductName,@CustomerID)
SELECT @Result=0
COMMIT TRANSACTION
END
END
Else
BEGIN
If Exists(SELECT OrderID FROM [Orders] WHERE
OrderID=@OrderID)
BEGIN
SELECT @Result=1
ROLLBACK TRANSACTION
END
Else
BEGIN
INSERT INTO
[Orders](OrderID,ProductName,CustomerID)
VALUES(@OrderID,@ProductName,@CustomerID)
SELECT @Result=0
COMMIT TRANSACTION
END
END
Print @Result
Return
9. Using VB 6 or VB.NET to execute the ‘AddNewOrder’ stored procedure
10. Using xp_cmdshell extended stored procedure to send a message (xp_cmdshell
‘net send Hello’)
HỌC SQL SERVER 2000 61
Exercise 3: Triggers And Views
Please follow those steps to practise:
16. Create 3 triggers to audit the changes to the Orders table.
Tips:
• Create an audit table “aud_Orders” with the same colums as in the
Orders table and 2 more colums AuditType(with values either
‘I’,’U’,’D’) and DateTimeStamp(which will record the date time
stamp of changes)
• Create Update Triggers (Similar to Insert,Delete) : when a record
in the Orders table is updated the trigger will move the old record
to the audit table(record the date time and mark it as ‘U’)
17. Create a view that shows all the orders with the following colums:
OrderID,CustomerName,ProductName,DateProcessed,Status
Business rules:
If CustomerName is a null value “New Customer” is returned
If DateProcessed is later than current date return “Pending”, if DateProcessed is
ealier return “History” in Status colum.
Tips:
a. Using Case When ...Then statement in the view
b. Using Getdate() function to get the current date time
File đính kèm:
- tham khao.pdf