T-SQL và Stored Procedure

MỤC LỤC

Mục Lục

Lời nói đầu

Giới thiệu chung về SQL Server

Chương 1: T-SQL

I. Các khái niệm cơ bản

II. Truy vấn tạo lập

III. Các phát biểu cơ bản của SQL Server

IV. Mệnh đề nối nhiều bảng

V. Sửa đổi cấu trúc dữ liệu

VI. Mệnh đề quản trị CSDL

VII. Mệnh đề Backup CSDL

 

Chương 2: Thủ tục thường trú (Stored Procedure)

I. Các khái niệm cơ bản

II. Tạo thủ tục thường trú

III. Một số thủ tục thường trú

 

Tài liệu tham khảo

 

doc46 trang | Chia sẻ: maiphuongdc | Lượt xem: 6335 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu T-SQL và Stored Procedure, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ợng (object-oriented)). Trong ví dụ sau TableX, KeyCol, Description là những identifiers CREATE TABLE TableX (KeyCol INT PRIMARY KEY, Description NVARCHAR(80)) Có hai loại Identifiers một loại thông thường (Regular Identifier) và một loại gọi là Delimited Identifier, loại này cần có dấu "" hay dấu [] để ngăn cách. Loại Delimited được dùng đối với các chữ trùng với từ khóa của SQL Server (reserved keyword) hay các chữ có khoảng trống. Ví dụ: SELECT * FROM [My Table] WHERE [Order] = 10 Trong ví dụ trên chữ Order trùng với keyword Order nên cần đặt trong dấu ngoặc vuông []. b. Variables (Biến) Biến trong T-SQL cũng có chức năng tương tự như trong các ngôn ngữ lập trình khác nghĩa là cần khai báo trước loại dữ liệu trước khi sử dụng. Biến được bắt đầu bằng dấu @ (Ðối với các global variable thì có hai dấu @@) Ví dụ: USE Northwind DECLARE @EmpIDVar INT SET @EmpIDVar = 3 SELECT * FROM Employees WHERE EmployeeID = @EmpIDVar + 1 c. Functions (Hàm) Có 2 loại hàm một loại là built-in và một loại user-defined Các hàm Built-In được chia làm 3 nhóm: Rowset Functions : Loại này thường trả về một object và được đối xử như một table. Ví dụ như hàm OPENQUERY sẽ trả về một recordset và có thể đứng vị trí của một table trong câu lệnh Select. Aggregate Functions : Loại  này làm việc trên một số giá trị và trả về một giá trị đơn hay là các giá trị tổng. Ví dụ như hàm AVG sẽ trả về giá trị trung bình của một cột. Scalar Functions : Loại này làm việc trên một giá trị đơn và trả về một giá trị đơn. Trong loại này lại chia làm nhiều loại nhỏ như các hàm về toán học, về thời gian, xử lý kiểu dữ liệu String....Ví dụ như hàm MONTH('2002-09-30') sẽ trả về tháng 9. Các hàm User-Defined (được tạo ra bởi câu lệnh CREATE FUNCTION và phần body thường được gói trong cặp lệnh BEGIN...END) cũng được chia làm các nhóm như sau: Scalar Functions : Loại này cũng trả về một giá trị đơn bằng câu lệnh RETURNS. Table Functions : Loại này trả về một table d. Expressions Các Expressions có dạng Identifier + Operators (như +,-,*,/,=...) + Value e. Các thành phần Control-Of Flow Như BEGIN...END, BREAK, CONTINUE, GOTO, IF...ELSE, RETURN, WHILE.... Xin xem thêm Books Online để biết thêm về các thành phần này. f. Comments (Chú Thích) T-SQL dùng dấu -- để đánh dấu phần chú thích cho câu lệnh đơn và dùng /*...*/ để chú thích cho một nhóm 3. Thực Thi Các Câu Lệnh SQL a. Thực thi một câu lệnh đơn: Một câu lệnh SQL được phân ra thành các thành phần cú pháp như trên bởi một bộ phân phận phân tích cú pháp (parser), sau đó SQL Optimizer (một bộ phận quan trọng của SQL Server) sẽ phân tích và tìm cách thực thi (Execute Plan) tối ưu nhất ví dụ như cách nào nhanh và tốn ít tài nguyên của máy nhất... và sau đó SQL Server Engine sẽ thực thi và trả về kết quả. b. Thực Thi một nhóm lệnh (Batches) Khi thực thi một nhóm lệnh SQL Server sẽ phân tích và tìm biện pháp tối ưu cho các câu lệnh như một câu lệnh đơn và chứa có kế hoạch thực hiện (execution plan) đã được biên dịch (compiled) trong bộ nhớ sau đó nếu nhóm lệnh trên được gọi lại lần nữa thì SQL Server không cần biên dịch mà có thể thực thi ngay điều này giúp cho một batch chạy nhanh hơn. c. Lệnh GO Lệnh này chỉ dùng để gởi một tín hiệu cho SQL Server biết đã kết thúc một lô công việc (batch job) và yêu cầu thực thi. II - Truy vấn tạo lập CREATE DATABASE: Cú pháp: CREATE DATABASE database_name [ ON     [ [ ,...n ] ] ] [ LOG ON { [ ,...n ] } ] ::= [ PRIMARY ] ( [ NAME = logical_file_name , ]     FILENAME = 'os_file_name'     [ , SIZE = size ]     [ , MAXSIZE = { max_size | UNLIMITED } ]     [ , FILEGROWTH = growth_increment ] ) [ ,...n ] Mục đích: Tạo cơ sở dữ liệu có tên là database_name. Giải thích: ON : các thông số file lưu lại cơ sở dữ liệu vừa tạo. LOG ON : file log cho cơ sở dữ liệu PRIMARY: dành cho PRIMARY file (nếu có nhiều file). NAME: tên logic cho file được định nghĩa. FILENAME : file vật lý trên đĩa. SIZE : độ lớn của file. MAXSIZE : độ lớn max của file FILEGROWTH : khối lượng đĩa được thêm vào file mỗi lần file cần thêm khoảng trống (tăng thêm). Ví dụ: CREATE DATABASE DB_Item ON ( NAME = DB_Item, FILENAME = ‘D:\BT\DeAnMonHoc\DB_Item.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'DB_Item_log', FILENAME = ‘D:\BT\DeAnMonHoc\DB_Item.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO CREATE DEFAULT: Tạo giá trị ngầm định (default) có tên rồi gán cho trường nào đó. Cú pháp: CREATE DEFAULT default_name AS default_value Ví dụ: CREATE DEFAULT phonedflt AS 'unknown' Sau đó thì gắn DEFAULT cho một trường bất kỳ: sp_bindefault phonedflt, 'authors.phone' và bỏ DEFAULT: EXEC sp_unbindefault phonedflt CREATE FUNCTION: Tạo hàm người dùng trong SQL Server. Cú pháp: CREATE  FUNCTION [ owner_name. ] function_name     ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS scalar_return_data_type [ WITH [ [,] ...n] ] [ AS ] BEGIN     function_body     RETURN scalar_expression END owner_name: Tên của ID người dùng. Tên này phải tồn tại. function_name: tên hàm. @parameter_name : tên biến AS kiểu biến = giá trị mặc định RETURN : cho giá trị trả về của hàm. Ví dụ: CREATE FUNCTION funcThanhTien (@SoLuong Int,@DonGia Float) RETURNS float AS BEGIN Declare @ThanhTien AS float Set @ThanhTien = @SoLuong * @DonGia RETURN(@ThanhTien) END Sử dụng hàm: SELECT funcThanhTien(10,5) AS ThanhTien Kết quả: ThanhTien ---------------- 50 CREATE PROCEDURE: Tạo thủ tục trong SQL Server. Cú pháp: CREATE PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }         [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ] [ WITH     { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] Ví dụ: USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = proc_item_info' AND type = 'P') DROP PROCEDURE proc_item_info GO Create Proc proc_item_info(@MaDoDung bigint) AS BEGIN SELECT [MaDoDung],[TenDoDung],[MoTa],[TenLoai], [TenNXB],[TacGia],[GiaTien],[NamXuatBan] FROM [tblDoDung] i INNER JOIN [tblLoai] c ON i.MaLoai=c.MaLoai INNER JOIN [tblNhaXuatBan] p ON p.MaNXB=i.MaNXB WHERE [MaDoDung] = @MaDoDung END GO CREATE TABLE: Tạo bảng dữ liệu (table) trong SQL Server. Cú pháp: CREATE TABLE     [ database_name.[ owner ] . | owner. ] table_name     ( {         | column_name AS computed_column_expression         | ::= [ CONSTRAINT constraint_name ] }             | [ { PRIMARY KEY | UNIQUE } [ ,...n ]     ) [ ON { filegroup | DEFAULT } ] [ TEXTIMAGE_ON { filegroup | DEFAULT } ] ::= { column_name data_type }     [ COLLATE ]     [ [ DEFAULT constant_expression ]         | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]     ]     [ ROWGUIDCOL]     [ ] [ ...n ] ::= [ CONSTRAINT constraint_name ]     { [ NULL | NOT NULL ]         | [ { PRIMARY KEY | UNIQUE }             [ CLUSTERED | NONCLUSTERED ]             [ WITH FILLFACTOR = fillfactor ]             [ON {filegroup | DEFAULT} ] ]         ]         | [ [ FOREIGN KEY ]             REFERENCES ref_table [ ( ref_column ) ]             [ ON DELETE { CASCADE | NO ACTION } ]             [ ON UPDATE { CASCADE | NO ACTION } ]             [ NOT FOR REPLICATION ]         ]         | CHECK [ NOT FOR REPLICATION ]         ( logical_expression )     } ::= [ CONSTRAINT constraint_name ]     { [ { PRIMARY KEY | UNIQUE }         [ CLUSTERED | NONCLUSTERED ]         { ( column [ ASC | DESC ] [ ,...n ] ) }         [ WITH FILLFACTOR = fillfactor ]         [ ON { filegroup | DEFAULT } ]     ]     | FOREIGN KEY         [ ( column [ ,...n ] ) ]         REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]         [ ON DELETE { CASCADE | NO ACTION } ]         [ ON UPDATE { CASCADE | NO ACTION } ]         [ NOT FOR REPLICATION ]     | CHECK [ NOT FOR REPLICATION ]         ( search_conditions )     } Ví dụ: CREATE TABLE tblLoai( MaLoai bigint not null primary key IDENTITY, TenLoai varchar(50) ) GO CREATE TABLE tblNhaXuatBan( MaNXB bigint not null primary key IDENTITY, TenNXB varchar(50) not null default '', DiaChi varchar(150) ) GO -- Tạo bảng đồ dùng CREATE TABLE tblDoDung( MaDoDung bigint not null primary key IDENTITY, MaNXB bigint FOREIGN KEY REFERENCES tblNhaXuatBan (MaNhaXuatBan) ON DELETE CASCADE ON UPDATE CASCADE, MaLoai bigint FOREIGN KEY REFERENCES tblLoai (MaLoai) ON DELETE CASCADE ON UPDATE CASCADE, TenDoDung varchar(50) not null Default '', [MoTa] varchar(150), TacGia varchar(50), NamXuatBan varchar(4), GiaTien float, NgayNhap DateTime Default GetDate() ) GO CREATE VIEW: Tạo khung nhìn (view) trong SQL Server. Cú pháp: CREATE VIEW [ . ] [ . ] view_name [ ( column [ ,...n ] ) ] [ WITH [ ,...n ] ] AS select_statement Ví dụ: --Partitioned view as defined on Server1 CREATE VIEW viewDoDung AS --Select from local member table SELECT * FROM tblDoDung III - Các phát biểu cơ bản của T-SQL SELECT: Phát biểu SELECT là một trong những phát biểu yêu cầu SQL Server đọc thông tin từ cơ sở dữ liệu theo những trường quy định hay biểu thức nào đó. Cú pháp: SELECT [FROM ] [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY ] FROM chỉ ra tên một bảng hay những bảng có quan hệ nào đó cần truy vấn thông tin. Ví dụ: Lấy dữ liệu từ bảng tblDoDung SELECT * FROM tblDoDung INSERT Lệnh INSERT được dùng khi cần them một mẩu tin (record) vào trong bảng của SQL Server 2000. Cú pháp: INSERT INTO table_name([field_name1],[field_name2],...) VALUES (‘value1’, ‘value2’,...) Chèn thêm 1 dòng vào bảng table_name giá trị của các trường field_name1, field_name2, ... là value1, value2, ... Ví dụ: INSERT INTO tblNhaXuatBan ([TenNXB], [DiaChi]) VALUES ('Giao Duc','Quan Hoan Kiem - Ha Noi') GO INSERT INTO tblLoai ([TenLoai]) VALUES ('Sach') GO INSERT INTO tblLoai ([TenLoai]) VALUES ('Đia CD') GO INSERT INTO tblDoDung ([MaNXB], [MaLoai], [TenDoDung], [MoTa], [TacGia], [NamXuatBan], [GiaTien]) VALUES ('1','1',Lap trinh ung dung chuyen nghiep SQL Server 2000','Tập 1 của giáo trình "Lập trình ứng dụng chuyên nghiệp SQL Server 2000" chú trọng đến kỹ năng lập trình, kỹ thuật ứng dụng SQL vào thực tiễn, xây dựng các phát biểu SQL có tính năng đặc biệt, phát triển một số thủ tục tính tồn quỹ, tồn kho theo 3 phương pháp, tính công nợ phải thu, tính công nợ phải trả, và một số thủ tục chuyên nghiệp khác.','Pham Huu Khang','2002','490000') GO UPDATE: Sửa dữ liệu của bản ghi trong SQL Server Cú pháp: UPDATE table_name SET [field_name1] = ‘value1’, [field_name2] = ‘value2’, ... WHERE Ví dụ: UPDATE tblDoDung SET TacGia = 'Pham Huu Khang' WHERE MaDoDung = '10' DELETE: Xoá bản ghi trong bảng. Cú pháp: DELETE FROM table_name WHERE Ví dụ: Xoá bản ghi có MaDoDung='10' trong bảng tblDoDung DELETE FROM tblDoDung WHERE MaDoDung='10' IV - Mệnh đề nối nhiều bảng INNER JOIN: Lệnh SELECT dùng INNER JOIN có tác dụng nối hai hay nhiều bảng dữ liệu trong cơ sở dữ liệu của SQL Server. Cú pháp: SELECT * FROM table_name1 INNER JOIN table_name2 ON Ví dụ: SELECT [MaDoDung],[TenDoDung],[TacGia], [TenNXB],[TenLoai] FROM tblDoDung AS i INNER JOIN tblLoai AS c ON c.MaLoai=i.MaLoai INNER JOIN tblNhaXuatBan AS p ON p.MaNXB=i.MaNXB WHERE i.MaDoDung='10' MaDoDung TenDoDung TacGia TenNXB TenLoai ----------------------------------------------------------------------------------------------- 10 Pham Huu Khang Giáo Dục Sách LEFT JOIN: Lệnh SELECT sử dụng LEFT JOIN lấy ra trong hai hay nhiều bảng kết hợp nhau theo điều kiện: những mẩu tin bên trái tồn tại ứng với những mẩu tin bảng bên phải không tồn tại. Cú pháp: SELECT * FROM table_name1 LEFT JOIN table_name2 ON Ví dụ: SELECT [MaDoDung],[TenDoDung],[TacGia], [TenNXB],[TenLoai] FROM tblDoDung AS i LEFT JOIN tblLoai AS c ON c.MaLoai=i.MaLoai LEFT JOIN tblNhaXuatBan AS p ON p.MaNXB=i.MaNXB WHERE i.MaDoDung='10' MaDoDung TenDoDung TacGia TenNXB TenLoai ----------------------------------------------------------------------------------------------- 10 Pham Huu Khang Giáo Dục Sách RIGHT JOIN: Ngược lại với LEFT JOIN, truy vấn SELECT dùng RIGHT JOIN sẽ xuất dữ liệu của bảng bên phải cho dù dữ liệu của bảng bên trái không tồn tại. Cú pháp: SELECT * FROM table_name1 RIGHT JOIN table_name2 ON Ví dụ: SELECT [MaDoDung],[TenDoDung],[TacGia], [TenNXB],[TenLoai] FROM tblDoDung AS i RIGHT JOIN tblLoai AS c ON c.MaLoai=i.MaLoai RIGHT JOIN tblNhaXuatBan AS p ON p.MaNXB=i.MaNXB WHERE i.MaDoDung='10' MaDoDung TenDoDung TacGia TenNXB TenLoai ----------------------------------------------------------------------------------------------- 10 Pham Huu Khang Giáo Dục Sách FULL JOIN: Khi không quan tâm đến dữ liệu ra cho dù dữ liệu bảng bên trái có tồn tại tương ứng với dữ liệu bảng bên phải hay không (hoặc ngược lại), ta dùng SELECT với FULL JOIN. Cú pháp: SELECT * FROM table_name1 FULL JOIN table_name2 ON Ví dụ: SELECT [MaDoDung],[TenDoDung],[TacGia], [TenNXB],[TenLoai] FROM tblDoDung AS i FULL JOIN tblLoai AS c ON c.MaLoai=i.MaLoai FULL JOIN tblNhaXuatBan AS p ON p.MaNXB=i.MaNXB WHERE i.MaDoDung='10' MaDoDung TenDoDung TacGia TenNXB TenLoai ----------------------------------------------------------------------------------------------- 10 Pham Huu Khang Giáo Dục Sách UNION: UNION không giống như mệnh đề JOIN, UNION là phép toán dùng để nối hai hay nhiều bảng với nhau. UNION kết nối dữ liệu theo chiều dọc. Điều kiện nối là số trường của bảng 1 phải bằng số trường của bảng 2. Cú pháp: SELECT * FROM table_name1 UNION table_name2 Ví dụ: SELECT [TenDoDung],[TacGia] FROM tblDoDung WHERE MaDoDung='10' UNION SELECT [TacGia], [TenDoDung] FROM tblDoDung V - Sửa đổi cấu trúc dữ liệu ALTER TABLE: Sửa cấu trúc của bảng dữ liệu (table structure) Cú pháp: ALTER TABLE table { [ ALTER COLUMN column_name     { new_data_type [ ( precision [ , scale ] ) ]         [ COLLATE ]         [ NULL | NOT NULL ]         | {ADD | DROP } ROWGUIDCOL }     ]     | ADD         { [ ]         |  column_name AS computed_column_expression         } [ ,...n ]     | [ WITH CHECK | WITH NOCHECK ] ADD         { } [ ,...n ]     | DROP         { [ CONSTRAINT ] constraint_name             | COLUMN column } [ ,...n ]     | { CHECK | NOCHECK } CONSTRAINT         { ALL | constraint_name [ ,...n ] }     | { ENABLE | DISABLE } TRIGGER         { ALL | trigger_name [ ,...n ] } } Ví dụ: Xoá bỏ cột DateInput trong bảng tblDoDung ALTER TABLE [tblDoDung] DROP COLUMN [DateInput] ALTER DATABASE: Sửa một cơ sở dữ liệu. Cú pháp: ALTER DATABASE database { ADD FILE [ ,...n ] [ TO FILEGROUP filegroup_name ] | ADD LOG FILE [ ,...n ] | REMOVE FILE logical_file_name | ADD FILEGROUP filegroup_name | REMOVE FILEGROUP filegroup_name | MODIFY FILE | MODIFY NAME = new_dbname | MODIFY FILEGROUP filegroup_name {filegroup_property | NAME = new_filegroup_name } | SET [ ,...n ] [ WITH ] | COLLATE } Ví dụ: Thêm log file cho Cơ sở dữ liệu DB_Item ALTER DATABASE [DB_Item] ADD LOG FILE ( NAME =Item_LogFile, FILENAME = ‘C:\db_item_log.txt’) ALTER FUNCTION: Sửa nội dung một hàm đã được người dùng định nghĩa trước đó. Cú pháp ALTER FUNCTION [ owner_name. ] function_name ( [ { @parameter_name scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS scalar_return_data_type [ WITH [,...n] ] [ AS ] BEGIN     function_body     RETURN scalar_expression END Ví dụ: ALTER FUNCTION funcThanhTien (@SoLuong Int,@DonGia Float) RETURNS float AS BEGIN Declare @ThanhTien AS float Set @ThanhTien = @SoLuong * @DonGia RETURN(@ThanhTien) END ALTER PROCEDURE: Sửa đổi nội dung một thủ tục thường trú mà người dùng tạo ra trước đó. Cú pháp: ALTER PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }         [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ] [ WITH     { RECOMPILE | ENCRYPTION         | RECOMPILE , ENCRYPTION     } ] [ FOR REPLICATION ] AS     sql_statement [ ...n ] Ví dụ: ALTER Proc proc_item_info(@MaDoDung bigint) AS BEGIN SELECT [MaDoDung],[TenDoDung],[MoTa],[TenLoai], [TenNXB],[TacGia],[GiaTien],[NamXuatBan] FROM [tblDoDung] i INNER JOIN [tblLoai] c ON i.MaLoai=c.MaLoai INNER JOIN [tblNhaXuatBan] p ON p.MaNXB=i.MaNXB WHERE [MaDoDung] = @MaDoDung END DROP DATABASE: Xoá cơ sở dữ liệu. Cú pháp: DROP DATABASE database_name [ ,...n ] Ví dụ: DROP DATABASE DB_Item DROP TABLE: Xoá bảng dữ liệu trong cơ sở dữ liệu hiện hành. Cú pháp: DROP TABLE table_name Ví dụ: DROP TABLE tblDoDung DROP VIEW: Xoá khung nhìn đã được tạo ra. Cú pháp: DROP VIEW { view } [ ,...n ] Ví dụ: DROP VIEW view_item DROP PROCEDURE: Xoá thủ tục thường trú mà người dùng đã tạo ra trong cơ sở dữ liệu hiện hành. Cú pháp: DROP PROCEDURE { procedure } [ ,...n ] Ví dụ: DROP PROCEDURE proc_item_info DROP DEFAULT: Xoá DEFAULT trong cơ sở dữ liệu hiện hành. Cú pháp: DROP DEFAULT { default } [ ,...n ] Ví dụ: DROP DEFAULT phonedflt DROP FUNCTION: Xoá hàm trong cơ sở dữ liệu hiện hành. Cú pháp: DROP FUNCTION { [ owner_name . ] function_name } [ ,...n ] Ví dụ: DROP FUNCTION funcThanhTien VI - Mệnh đề quản trị CSDL SHUTDOWN: Tắt dịch vụ SQL Server. Cú pháp: SHUTDOWN [ WITH NOWAIT ] Ví dụ: SHUTDOWN GRANT: Ban quyền cho tài khoản người sử dụng Cú pháp: GRANT     { ALL [ PRIVILEGES ] | permission [ ,...n ] }     {         [ ( column [ ,...n ] ) ] ON { table | view }         | ON { table | view } [ ( column [ ,...n ] ) ]         | ON { stored_procedure | extended_procedure }         | ON { user_defined_function }     } TO security_account [ ,...n ] [ WITH GRANT OPTION ] [ AS { group | role } ] Ví dụ: Ban quyền tạo cơ sở dữ liệu, tạo bảng dữ liệu cho người dùng Mary và John. GRANT CREATE DATABASE, CREATE TABLE TO Mary, John REVOKE: tước quyền của tài khoản người sử dụng. Cú pháp: REVOKE { ALL | statement [ ,...n ] } FROM security_account [ ,...n ] Ví dụ: Tước bỏ quyền tạo bảng dữ liệu của người sử dụng Joe. REVOKE CREATE TABLE FROM Joe DENY: Từ chối quyền mà Account được thừa kế từ một nhóm. Nếu một nhóm được ban quyền, mà ta không muốn 1 hay nhiều người dùng trong nhóm đó có những quyền được ban cho nhóm (hoặc hạn chế quyền) thì dùng truy vấn DENY. Cú pháp: DENY { ALL | statement [ ,...n ] } TO security_account [ ,...n ] Ví dụ: Từ chối các quyền mà các user được thừa kế trong nhóm. USE pubs GO -- Ban quyền SELECT bảng authors cho nhóm public GRANT SELECT ON authors TO public GO -- Tước đi quyền SELECT, INSERT, UPDATE và DELETE bảng authors của các -- user Mary, John và Tom DENY SELECT, INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom VII - Mệnh đề Backup Cơ sở Dữ liệu BACKUP: Tạo BACKUP cho cơ sở dữ liệu, phòng trường hợp bị lỗi, muốn khôi phục lại. Trước khi BACKUP thì phải tạo Device cho việc BACKUP. Cú pháp: BACKUP DATABASE { database_name | @database_name_var } TO [ ,...n ] [ WITH     [ BLOCKSIZE = { blocksize | @blocksize_variable } ]     [ [ , ] DESCRIPTION = { 'text' | @text_variable } ]     [ [ , ] DIFFERENTIAL ]     [ [ , ] EXPIREDATE = { date | @date_var }         | RETAINDAYS = { days | @days_var } ]     [ [ , ] PASSWORD = { password | @password_variable } ]     [ [ , ] FORMAT | NOFORMAT ]     [ [ , ] { INIT | NOINIT } ]     [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]     [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]     [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]     [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]     [ [ , ] { NOSKIP | SKIP } ]     [ [ , ] { NOREWIND | REWIND } ]     [ [ , ] { NOUNLOAD | UNLOAD } ]     [ [ , ] RESTART ]     [ [ , ] STATS [ = percentage ] ] ] Ví dụ: -- Tao Logical Device cho viec Backup EXEC sp_addumpdevice 'disk', 'DB_Item_bak', 'D:\BT\DeAnMonHoc\DB_Item_bak.dat' -- Bat dau Backup BACKUP DATABASE DB_Item TO DB_Item_bak GO RESTORE: Khôi phục lại cơ sở dữ liệu đã BACKUP trước đó. Cú pháp: RESTORE DATABASE { database_name | @database_name_var } [ FROM [ ,...n ] ] [ WITH     [ RESTRICTED_USER ]     [ [ , ] FILE = { file_number | @file_number } ]     [ [ , ] PASSWORD = { password | @password_variable } ]     [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]     [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]     [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]             [ ,...n ]     [ [ , ] KEEP_REPLICATION ]     [ [ , ] { NORECOVERY | RECOVERY | STANDBY = undo_file_name } ]     [ [ , ] { NOREWIND | REWIND } ]     [ [ , ] { NOUNLOAD | UNLOAD } ]     [ [ , ] REPLACE ]     [ [ , ] RESTART ]     [ [ , ] STATS [ = percentage ] ] ] Ví dụ: Phục hồi cơ sở dữ liệu DB_Item và sau đó khởi động lại SQL Server. RESTORE DATABASE DB_Item FROM DB_Item_bak WITH RESTART CHƯƠNG 2: THỦ TỤC THƯỜNG TRÚ (STORE PROCEDURE) I - Các khái niệm cơ bản Stored Procedure là một nhóm câu lệnh Transact-SQL đã được compiled (biên dịch) và chứa trong SQL Server dưới một tên nào đó và được xử lý như một đơn vị. 1. Ưu Ðiểm Của Stored Procedure Stored Procedure có một số ưu điểm chính như sau: Hiệu quả : Khi thực thi một câu lệnh SQL thì SQL Server phải kiểm tra permission xem user gởi câu lệnh đó có được phép thực hiện câu lệnh hay không đồng thời kiểm tra cú pháp rồi mới tạo ra một execute plan và thực thi. Nếu có nhiều câu lệnh như vậy gởi qua network có thể làm giảm đi tốc độ làm việc của server. SQL Server sẽ làm việc hiệu quả hơn nếu dùng stored procedure vì người gởi chỉ gởi một câu lệnh đơn và SQL Server chỉ kiểm tra một lần sau đó tạo ra một execute plan và thực thi. Nếu stored procedure được gọi nhiều lần thì execute plan có thể được sử dụng lại nên sẽ làm việc nhanh hơn. Ngoài ra cú pháp của các câu lệnh SQL đã được SQL Sever kiểm tra trước khi lưu lại nên nó không cần kiểm lại khi thực thi. Khung lập trình : Một khi stored procedure được tạo ra nó có thể được sử dụng lại. Ðiều này sẽ làm cho việc bảo trì (maintainability) dễ dàng hơn do việc tách rời giữa business rules (tức là những logic thể hiện bên trong stored procedure) và database. Ví dụ nếu có một sự thay đổi nào đó về mặt logic thì ta chỉ việc thay đổi code bên trong stored procedure mà thôi. Những ứng dụng dùng stored procedure này có thể sẽ không cần phải thay đổi mà vẫn tương thích với business rule mới. Cũng giống như các ngôn ngữ lập trình khác stored procedure cho phép ta đưa vào các input parameters (tham số) và trả về các output parameters đồng thời nó cũng có khả năng gọi các stored procedure khác. An ninh và bảo mật : Giả sử chúng ta muốn giới hạn việc truy xuất dữ liệu trực tiếp của một user nào đó vào một số tables, ta có thể viết một stored procedure để truy xuất dữ liệu và chỉ cho phép user đó được sử dụng stored procedure đã viết sẵn mà thôi chứ không thể "đụng" đến các tables đó một cách trực tiếp. Ngoài ra stored procedure có thể được encrypt (mã hóa) để tăng cường tính bảo mật. 2. Các Loại Stored Procedure Stored procedure có thể được chia thành 5 nhóm như sau: System Stored Prcedure: Là những stored procedure chứa trong Master database và thường bắt đầu bằng tiếp đầu ngữ sp_ . Các stored procedure này thuộc loại built-in và chủ yếu dùng trong việc quản lý database (administration) và security. Ví dụ bạn có thể kiểm tra tất cả các processes đang được sử dụng bởi user DomainName\Administrators bạn có thể dùng sp_who @loginame='DomainName\Administrators' . Có hàng trăm system stored procedure trong SQL Server. Bạn có thể xem chi tiết trong SQL Server Books Online. Local Stored Procedure: Ðây là loại thường dùng nhất. Chúng được chứa trong user database và thường được viết để thực hiện một công việc nào đó. Thông thường người ta nói đến stored procedure là nói đến loại này. Local stored procedure thường được viết bởi DBA hoặc programmer. Chúng ta sẽ bàn về cách tạo stored prcedure loại này trong phần kế tiếp. Temporary Stored Procedure: Là những stored procedure tương tự như local stored procedure nhưng chỉ tồn tại cho đến khi connection đã tạo ra chúng bị đóng lại hoặc SQL Server shutdown. Các stored procedure này được tạo ra trên TempDB của SQL Server nên chúng sẽ bị delete khi connection tạo ra chúng bị cắt đứt hay khi SQL Server down. Temporary stored procedure được chia làm 3 loại : local (bắt đầu bằng #), global (bắt đầu bằng ##) và stored procedure được tạo ra trực tiếp trên TempDB. Loại local chỉ được sử dụng bởi connection đã tạo ra chúng và bị xóa khi disconnect, còn loại global có thể được sử dụng bởi bất kỳ connection nào. Permission cho loại global là dành cho mọi người (public) và không thể thay đổi. Loại stored procedure được tạo trực tiếp trên TempDB khác với 2 loại trên ở chỗ ta có thể set permission, chúng tồn tại kể cả sau khi connection tạo ra chúng bị cắt đứt và chỉ biến mất khi SQL Server shut down. Extended Stored Procedure: Ðây là một loại stored

Các file đính kèm theo tài liệu này:

  • doc345dfgd.doc