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
46 trang |
Chia sẻ: maiphuongdc | Lượt xem: 6335 | Lượt tải: 1
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. ExpressionsCác Expressions có dạng Identifier + Operators (như +,-,*,/,=...) + Value
e. Các thành phần Control-Of FlowNhư 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 GOLệ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_expressionEND
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_expressionEND
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:
- 345dfgd.doc