RSS

Học SQL Server 2000

06 May

I. Tổng quan

1. Câu lệnh SQL

SQL chuẩn bao gồm 40 câu lệnh. Sau đây là danh sách các câu lệnh thường được sử dụng nhất trong số các câu lệnh SQL

Câu lệnh

Chức năng

Thao tác dữ liệu

SELECT

Truy xuất dữ liệu

INSERT

Bổ sung dữ liệu

UPDATE

Cập nhật dữ liệu

DELETE

Xoá dữ liệu

TRUNCATE

Xóa toàn bộ dữ liệu trong bảng

Định nghĩa dữ liệu

CREATE TABLE

Tạo bảng

DROP TABLE

Xóa bảng

ALTER TABLE

Sửa đổi bảng

CREATE VIEW

Tạo khung nhìn

ALTER VIEW

Sửa đổi khung nhìn

DROP VIEW

Xóa khung nhìn

CREATE INDEX

Tạo chỉ mục

DROP INDEX

Xóa chỉ mục

CREATE SCHEMA

Tạo lược đồ csdl

DROP SCHEMA

Xóa lược đồ csdl

CREATE PROCEDURE

Tạo thủ tục lưu trữ

ALTER PROCEDURE

Sửa đổi thủ tục lưu trữ

DROP PROCEDURE

Xóa thủ tục lưu trữ

CREATE FUNCTION

Tạo hàm

ALTER FUNCTION

Sửa đổi hàm

DROP FUNCTION

Xóa hàm

CREATE TRIGGER

Tạo trigger

ALTER TRIGGER

Sửa đổii trigger

DROP TRIGGER

Xóa trigger

Điểu khiển truy cập

GRANT

Cấp phát quyền cho người sử dụng

REVOKE

Thu hồi quyền từ người sử dụng

Quản lý giao tác

COMMIT

Ủy thác(kết thúc thành công) giao tác

ROLLBACK

Quay lui giao tác

SAVE TRANSACTION

Đánh dấu một điểm trong giao tác

Lập trình

DECLARE

Khai báo biến hoặc định nghĩa con trỏ

OPEN

Mở một con trỏ để truy xuất kết quả truy vấn

FETCH

Đọc một dòng trong kết quả truy vấn(sử dụng con trỏ)

CLOSE

Đóng một con trỏ

EXECUTE

Thực thi một câu lệnh SQL

2. Kiểu dữ liệu

Tên kiểu

Mô tả

CHAR (n)

Kiểu chuỗi với độ dài cố định

NCHAR (n)

Kiếu chuỗi với độ dài cố định hỗ trợ UNICODE

VARCHAR (n)

Kiểu chuỗi với độ dài chính xác

NVARCHAR (n)

Kiểu chuỗi với độ dài chính xác hỗ trợ UNICODE

INTEGER

Số nguyên có giá trị từ -231 đến 231 – 1

INT

Như kiểu Integer

TINYTINT

Số nguyên có giá trị từ 0 đến 255.

SMALLINT

Số nguyên có giá trị từ -215 đến 215 – 1

BIGINT

Số nguyên có giá trị từ -263 đến 263-1

NUMERIC (p,s)

Kiểu số với độ chính xác cố định

DECIMAL (p,s)

Tương tự kiểu Numeric

FLOAT

Số thực có giá trị từ -1.79E+308 đến 1.79E+308

REAL

Số thực có giá trị từ -3.40E + 38 đến 3.40E + 38

MONEY

Kiểu tiền tệ

BIT

Kiểu bit (có giá trị 0 hoặc 1)

DATETIME

Kiểu ngày giờ (chính xác đến phần trăm của giây)

SMALLDATETIME

Kiểu ngày giờ (chính xác đến phút)

TIMESTAMP

BINARY

Dữ liệu nhị phân với độ dài cố định (tối đa 8000 bytes)

VARBINARY

Dữ liệu nhị phân với độ dài chính xác (tối đa 8000 bytes)

IMAGE

Dữ liệu nhị phân với độ dài chính xác (tối đa 2,147,483,647 bytes)

TEXT

Dữ liệu kiếu chuỗi với độ dài lớn (tối đa 2,147,483,647 ký tự)

NTEXT

Dữ liệu kiếu chuỗi với độ dài lớn và hỗ trợ UNICODE (tối

đa 1,073,741,823 ký tự)

Giá trị NULL

Một cơ sở dữ liệu là sự phản ánh của một hệ thống trong thế giới thực, do đó

các giá trị dữ liệu tồn tại trong cơ sở dữ liệu có thể không xác định được. Một giá trị

không xác định được xuất hiện trong cơ sở dữ liệu có thể do một số nguyên nhân sau:

Giá trị đó có tồn tại nhưng không biết.

Không xác định được giá trị đó có tồn tại hay không.

Tại một thời điểm nào đó giá trị chưa có nhưng rồi có thể sẽ có.

Giá trị bị lỗi do tính toán (tràn số, chia cho không,…)

Những giá trị không xác định được biểu diễn trong cơ sở dữ liệu quan hệ bởi

các giá trị NULL. Đây là giá trị đặc biệt và không nên nhầm lẫn với chuỗi rỗng (đối

với dữ liệu kiểu chuỗi) hay giá trị không (đối với giá trị kiểu số). Giá trị NULL đóng

một vai trò quan trọng trong các cơ sở dữ liệu và hầu hết các hệ quản trị cơ sở dữ liệu

quan hệ hiện nay đều hỗ trợ việc sử dụng giá trị này.

II. NGÔN NGỮ THAO TÁC DỮ LIỆU

1. Truy xuất dữ liệu với câu lệnh SELECT

Cú pháp chung của câu lệnh SELECT có dạng:

SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn

[INTO tên_bảng_mới]

FROM danh_sách_bảng/khung_nhìn

[WHERE điều_kiện]

[GROUP BY danh_sách_cột]

[HAVING điều_kiện]

[ORDER BY cột_sắp_xếp]

[COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]]

Điều cần lưu ý đầu tiên đối với câu lệnh này là các thành phần trong câu lệnh

SELECT nếu được sử dụng phải tuân theo đúng thứ tự như trong cú pháp. Nếu không,

câu lệnh sẽ được xem là không hợp lệ.

Câu lệnh SELECT được sử dụng để tác động lên các bảng dữ liệu và kết quả

của câu lệnh cũng được hiển thị dưới dạng bảng, tức là một tập hợp các dòng và các

cột (ngoại trừ trường hợp sử dụng câu lệnh SELECT với mệnh đề COMPUTE).

2 Bổ sung, cập nhật và xoá dữ liệu

2.1 Bổ sung dữ liệu

Bổ sung từng dòng dữ liệu với mỗi câu lệnh INSERT. Đây là các sử dụng

thường gặp nhất trong giao tác SQL.

INSERT INTO tên_bảng[(danh_sách_cột)] VALUES(danh_sách_trị)

Bổ sung nhiều dòng dữ liệu bằng cách truy xuất dữ liệu từ các bảng dữ liệu

khác.

INSERT INTO tên_bảng[(danh_sách_cột)] câu_lệnh_SELECT

2.2 Cập nhật dữ liệu

Câu lệnh này có cú pháp như sau:

UPDATE tên_bảng

SET tên_cột = biểu_thức

[, …, tên_cột_k = biểu_thức_k]

[FROM danh_sách_bảng]

[WHERE điều_kiện]

2.3 Xoá dữ liệu

Cú pháp :

DELETE FROM tên_bảng

[FROM danh_sách_bảng]

[WHERE điều_kiện]

Trong câu lệnh này, tên của bảng cần xoá dữ liệu được chỉ định sau DELETE FROM.

Mệnh đề WHERE trong câu lệnh được sử dụng để chỉ định điều kiện đối với các dòng

dữ liệu cần xoá. Nếu câu lệnh DELETE không có mệnh đề WHERE thì toàn bộ các

dòng dữ liệu trong bảng đều bị xoá.

Xoá dữ liệu khi điều kiện liên quan đến nhiều bảng

Nếu điều kiện trong câu lệnh DELETE liên quan đến các bảng không phải

bảng cần xóa dữ liệu, ta phải sử dụng thêm mệnh đề FROM và sau đó là danh sách tên

các bảng đó. Trong trường hợp này, trong mệnh đề WHERE ta chỉ định thêm điều kiện

nối giữa các bảng

III. NGÔN NGỮ ĐỊNH NGHĨA DỮ LIỆU

3.1 Tạo bảng dữ liệu

Câu lệnh CREATE TABLE có cú pháp như sau

CREATE TABLE tên_bảng

( tên_cột thuộc_tính_cột các_ràng_buộc

[,…

,tên_cột_n thuộc_tính_cột_n các_ràng_buộc_cột_n]

[,các_ràng_buộc_trên_bảng]

)

Trong đó:

tên_bảng : Tên của bảng cần tạo. Tên phải tuân theo qui tắc định danh và

không được vượt quá 128 ký tự.

tên_cột: là tên của cột (trường) cần định nghĩa, tên cột phải tuân theo

qui tắc định danh không được trùng nhau trong mỗi một bảng. Mỗi một bảng phải có ít nhất một cột. Nếu bảng có nhiều cột thì định nghĩa của các cột (tên cột, thuộc tính các ràng buộc) phải phân cách nhau bởi dấu phẩy.

thuộc_tính_cột: Mỗi một cột trong một bảng ngoài tên cột còn có các thuộc tính

bao gồm:

Kiểu dữ liệu của cột. Đây là thuộc tính bắt buộc phải có đối với mỗi cột.

Giá trị mặc định của cột: là giá trị được tự động gán cho cột nếu như người sử dụng không nhập dữ liệu cho cột một cách tường minh. Mỗi một cột chỉ có thể

có nhiều nhất một giá trị mặc định.

Cột có tính chất IDENTITY hay không? tức là giá trị của cột có được tự động tăng mỗi khi có bản ghi mới được bổ sung hay không. Tính chất này chỉ có thể sử

dụng đối với các trường kiểu số.

Cột có chấp nhận giá trị NULL hay không

các_ràng_buộc:

3.1.1 Ràng buộc CHECK

Ràng buộc CHECK được sử dụng nhằm chỉ định điều kiện hợp lệ đối với dữ

liệu. Mỗi khi có sự thay đổi dữ liệu trên bảng (INSERT, UPDATE), những ràng buộc

này sẽ được sử dụng nhằm kiểm tra xem dữ liệu mới có hợp lệ hay không.

Ràng buộc CHECK được khai báo theo cú pháp như sau:

[CONSTRAINT tên_ràng_buộc]

CHECK (điều_kiện)

3.1.2 Ràng buộc PRIMARY KEY

Ràng buộc PRIMARY KEY được sử dụng để định nghĩa khoá chính của bảng.

Khoá chính của một bảng là một hoặc một tập nhiều cột mà giá trị của chúng là duy

nhất trong bảng. Hay nói cách khác, giá trị của khoá chính sẽ giúp cho ta xác định được duy nhất một dòng (bản ghi) trong bảng dữ liệu. Mỗi một bảng chỉ có thể có duy nhất một khoá chính bản thân khoá chính không chấp nhận giá trị NULL. Ràng buộc PRIMARY KEY là cơ sở cho việc đảm bảo tính toàn vẹn thực thể cũng như toàn vẹn tham chiếu.

Để khai báo một ràng buộc PRIMARY KEY, ta sử dụng cú pháp như sau:

[CONSTRAINT tên_ràng_buộc]

PRIMARY KEY [(danh_sách_cột)]

3.1.3 Ràng buộc UNIQUE

Trên một bảng chỉ có thể có nhiều nhất một khóa chính nhưng có thể có nhiều

cột hoặc tập các cột có tính chất như khoá chính, tức là giá trị của chúng là duy nhất

trong bảng. Tập một hoặc nhiều cột có giá trị duy nhất và không được chọn làm khoá

chính được gọi là khoá phụ (khoá dự tuyển) của bảng. Như vậy, một bảng chỉ có nhiều

nhất một khoá chính nhưng có thể có nhiều khoá phụ.

Ràng buộc UNIQUE được sử dụng trong câu lệnh CREATE TABLE để định nghĩa khoá phụ cho bảng và được khai báo theo cú pháp sau đây:

[CONSTRAINT tên_ràng_buộc]

UNIQUE [(danh_sách_cột)]

3.1.4 Ràng buộc FOREIGN KEY

Ràng buộc FOREIGN KEY được sử dụng trong định nghĩa bảng dữ liệu nhằm

tạo nên mối quan hệ giữa các bảng trong một cơ sở dữ liệu. Một hay một tập các cột

trong một bảng được gọi là khoá ngoại, tức là có ràng buộc FOREIGN KEY, nếu giá

trị của nó được xác định từ khoá chính (PRIMARY KEY) hoặc khoá phụ (UNIQUE)

của một bảng dữ liệu khác.

Ràng buộc FOREIGN KEY được định nghĩa theo cú pháp dưới đây:

[CONSTRAINT tên_ràng_buộc]

FOREIGN KEY [(danh_sách_cột)]

REFERENCES tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu)

[ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT]

[ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT]

Việc định nghĩa một ràng buộc FOREIGN KEY bao gồm các yếu tố sau:

Tên cột hoặc danh sách cột của bảng được định nghĩa tham gia vào khoá

ngoài.

Tên của bảng được tham chiếu bởi khoá ngoài danh sách các cột được

tham chiếu đến trong bảng tham chiếu.

Cách thức xử lý đối với các bản ghi trong bảng được định nghĩa trong trường

hợp các bản ghi được tham chiếu trong bảng tham chiếu bị xoá (ON

DELETE) hay cập nhật (ON UPDATE). SQL chuẩn đưa ra 4 cách xử lý:

CASCADE: Tự động xoá (cập nhật) nếu bản ghi được tham chiếu

bị xoá (cập nhật).

NO ACTION: (Mặc định) Nếu bản ghi trong bảng tham chiếu

đang được tham chiếu bởi một bản ghi bất kỳ trong bảng được

định nghĩa thì bàn ghi đó không được phép xoá hoặc cập nhật (đối

với cột được tham chiếu).

SET NULL: Cập nhật lại khoá ngoài của bản ghi thành giá trị

NULL (nếu cột cho phép nhận giá trị NULL).

SET DEFAULT: Cập nhật lại khoá ngoài của bản ghi nhận giá trị

mặc định (nếu cột có qui định giá trị mặc định).

3.2 Sửa đổi định nghĩa bảng

Một bảng sau khi đã được định nghĩa bằng câu lệnh CREATE TABLE có thể

được sửa đổi thông qua câu lệnh ALTER TABLE. Câu lệnh này cho phép chúng ta thực hiện được các thao tác sau:

Bổ sung một cột vào bảng.

Xoá một cột khỏi bảng.

Thay đổi định nghĩa của một cột trong bảng.

Xoá bỏ hoặc bổ sung các ràng buộc cho bảng

Cú pháp của câu lệnh ALTER TABLE như sau:

ALTER TABLE tên_bảng

ADD định_nghĩa_cột |

ALTER COLUMN tên_cột kiểu_dữ_liêu [NULL | NOT NULL] |

DROP COLUMN tên_cột |

ADD CONSTRAINT tên_ràng_buộc định_nghĩa_ràng_buộc |

DROP CONSTRAINT tên_ràng_buộc

3.3 Xoá bảng

Câu lệnh có cú pháp như sau:

DROP TABLE tên_bảng

3.4 Khung nhìn

Một khung nhìn (view) có thể được xem như là một bảng “ảo” trong cơ sở dữ

liệu nội dung được định nghĩa thông qua một truy vấn (câu lệnh SELECT)

3.4.1 Tạo khung nhìn

Câu lệnh CREATE VIEW được sử dụng để tạo ra khung nhìn và có cú pháp như sau:

CREATE VIEW ten_khung_nhin[ (danh_sach_ten_cot)]

AS

Câu_lệnh_SELECT

3.4.2 Cập nhật, bổ sung và xoá dữ liệu thông qua khung nhìn

Để có thể thực hiện thao tác bổ sung, cập nhật xoá, một khung nhìn trước tiên phải thoả mãn các điều kiện sau đây:

Trong câu lệnh SELECT định nghĩa khung nhìn không được sử dụng từ

khoá DISTINCT, TOP, GROUP BY và UNION.

Các thành phần xuất hiện trong danh sách chọn của câu lệnh SELECT phải

là các cột trong các bảng cơ sở. Trong danh sách chọn không được chứa các

biểu thức tính toán, các hàm gộp.

3.4.3 Sửa đổi khung nhìn

Cú pháp như sau:

ALTER VIEW tên_khung_nhìn [(danh_sách_tên_cột)]

AS

Câu_lệnh_SELECT

3.4.4 Xoá khung nhìn

DROP VIEW tên_khung_nhìn


IV. THỦ TỤC LƯU TRỮ, HÀM VÀ TRIGGER

4.1 Thủ tục lưu trữ (stored procedure)

4.1.1 Tạo thủ tục lưu trữ

Thủ tục lưu trữ được tạo bởi câu lệnh CREATE PROCEDURE với cú pháp như sau:

CREATE PROCEDURE tên_thủ_tục [(danh_sách_tham_số)]

[WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]

AS

Các_câu_lệnh_của_thủ_tục

Trong đó:

tên_thủ_tục :Tên của thủ tục cần tạo. Tên phải tuân theo qui tắc định danh và không được vượt quá 128 ký tự.

danh_sách_tham_số: Các tham số của thủ tục được khai báo ngay sau tên thủ tục và nếu thủ tục có nhiều tham số thì các khai báo phân cách nhau bởi dấu phẩy. Khai báo của mỗi một tham số tối thiểu phải bao gồm hai phần:

tên tham số được bắt đầu bởi dấu @.

kiểu dữ liệu của tham số

Ví dụ: @mamonhoc nvarchar(10)

RECOMPILE : Thông thường, thủ tục sẽ được phân tích, tối ưu và dịch sẵn lần gọi đầu tiên. Nếu tuỳ chọn WITH RECOMPILE được chỉ định, thủ tục sẽ được dịch

lại mỗi khi được gọi.

ENCRYPTION :Thủ tục sẽ được hoá nếu tuỳ chọn WITH ENCRYPTION được chỉ định. Nếu thủ tục đã được mã hoá, ta không thể xem được nội dung của thủ tục.

các_câu_lệnh_của_thủ_tục: Tập hợp các câu lệnh sử dụng trong nội dung thủ

tục. Các câu lệnh này có thể đặt trong cặp từ khoá BEGIN…END hoặc có thể không.

4.1.2 Lời gọi thủ tục lưu trữ

Như đã thấy ở ví dụ ở trên, khi một thủ tục lưu trữ đã được tạo ra, ta có thể yêu

cầu hệ quản trị cơ sở dữ liệu thực thi thủ tục bằng lời gọi thủ tục có dạng:

tên_thủ_tục [danh_sách_các_đối_số]

Số lượng các đối số cũng như thứ tự của chúng phải phù hợp với số lượng và thứ tự

của các tham số khi định nghĩa thủ tục.

Trong trường hợp lời gọi thủ tục được thực hiện bên trong một thủ tục khác, bên

trong một trigger hay kết hợp với các câu lệnh SQL khác, ta sử dụng cú pháp như sau:

EXECUTE tên_thủ_tục [danh_sách_các_đối_số]

Thứ tự của các đối số được truyền cho thủ tục có thể không cần phải tuân theo

thứ tự của các tham số như khi định nghĩa thủ tục nếu tất cả các đối số được viết dưới

dạng:

@tên_tham_số = giá_trị

4.1.3 Sử dụng biến trong thủ tục

Ngoài những tham số được truyền cho thủ tục, bên trong thủ tục còn có thể sử

dụng các biến nhằm lưu giữ các giá trị tính toán được hoặc truy xuất được từ cơ sở dữ

liệu. Các biến trong thủ tục được khai báo bằng từ khoá DECLARE theo cú pháp như

sau:

DECLARE @tên_biến kiểu_dữ_liệu

Tên biến phải bắt đầu bởi ký tự @ và tuân theo qui tắc về định danh

4.1.4 Giá trị trả về của tham số trong thủ tục lưu trữ

Nếu đối số truyền cho thủ tục khi có lời gọi đến thủ tục là biến, những thay đổi giá trị của biền trong thủ tục sẽ không được giữ lại khi kết thúc quá trình thực hiện thủ tục.

Trong trường hợp cần phải giữ lại giá trị của đối số sau khi kết thúc thủ tục, ta

phải khai báo tham số của thủ tục theo cú pháp như sau:

@tên_tham_số kiểu_dữ_liệu OUTPUT

hoặc:

@tên_tham_số kiểu_dữ_liệu OUT

4.1.5 Tham số với giá trị mặc định

Các tham số được khai báo trong thủ tục có thể nhận các giá trị mặc định. Giá

trị mặc định sẽ được gán cho tham số trong trường hợp không truyền đối số cho tham

số khi có lời gọi đến thủ tục.

Tham số với giá trị mặc định được khai báo theo cú pháp như sau:

@tên_tham_số kiểu_dữ_liệu = giá_trị_mặc_định

4.1.6 Sửa đổi thủ tục

Khi một thủ tục đã được tạo ra, ta có thể tiến hành định nghĩa lại thủ tục đó bằng

câu lệnh ALTER PROCEDURE có cú pháp như sau:

ALTER PROCEDURE tên_thủ_tục [(danh_sách_tham_số)]

[WITH RECOMPILE | ENCRYPTION 1| RECOMPILE,ENCRYPTION]

AS

Các_câu_lệnh_Của_thủ_tục

Câu lệnh này sử dụng tương tự như câu lệnh CREATE PROCEDURE. Việc sửa đổi lại

một thủ tục đã có không làm thay đổi đến các quyền đã cấp phát trên thủ tục cũng như

không tác động đến các thủ tục khác hay trigger phụ thuộc vào thủ tục này.

4.1.7 Xoá thủ tục

Để xoá một thủ tục đã có, ta sử dụng câu lệnh DROP PROCEDURE với

pháp như sau:

DROP PROCEDURE tên_thủ_tục

Khi xoá một thủ tục, tất cả các quyền đã cấp cho người sử dụng trên thủ tục đó cũng

đồng thời bị xoá bỏ. Do đó, nếu tạo lại thủ tục, ta phải tiến hành cấp phát lại các quyền

trên thủ tục đó.

4.2 Hàm do người dùng định nghĩa

Hàm là đối tượng cơ sở dữ liệu tương tự như thủ tục. Điểm khác biệt giữa hàm

và thủ tục là hàm trả về một giá trị thông qua tên hàm còn thủ tục thì không. Điều này

cho phép ta sử dụng hàm như là một thành phần của một biêu thức (chẳng hạn trong

danh sách chọn của câu lệnh SELECT).

4.2.1 Định nghĩa và sử dụng hàm

Hàm được định nghĩa thông qua câu lệnh CREATE FUNCTION với pháp

như sau:

CREATE FUNCTION tên_hàm ([danh_sách_tham_số])

RETURNS (kiểu_trả_về_của_hàm)

AS

BEGIN

các_câu_lệnh_của_hàm

END

4.2.2 Hàm với giá trị trả về là “dữ liệu kiểu bảng”

CREATE FUNCTION tên_hàm ([danh_sách_tham_số])

RETURNS TABLE

AS

RETURN (câu_lệnh_select)

Cú pháp phải tuân theo các qui tắc sau:

Kiểu trả về của hàm phải được chỉ định bởi mệnh đề RETURNS TABLE.

Trong phần thân của hàm chỉ có duy nhất một câu lệnh RETURN xác định giá trị trả về của hàm thông qua duy nhất một câu lệnh SELECT. Ngoài ra, không sử dụng bất kỳ câu lệnh nào khác trong phần thân của hàm.

4.3 Trigger

Ta đã biết các ràng buộc được sử dụng để đảm bảo tính toàn vẹn dữ liệu trong cơ sở dữ liệu. Một đối tượng khác cũng thường được sử dụng trong các cơ sở dữ liệu cũng với mục đích này là các trigger

Mỗi một trigger được tạo ra gắn liền với một bảng nào đó trong sở dữ

liệu. Khi dữ liệu trong bảng bị thay đổi (tức là khi bảng chịu tác động của các câu lệnh

INSERT, UPDATE hay DELETE) thì trigger sẽ được tự đông kích hoạt.

4.3.1 Định nghĩa trigger

Câu lệnh CREATE TRIGGER được sử dụng để đinh nghĩa trigger

pháp như sau:

CREATE TRIGGER tên_trigger

ON tên_bảng

FOR {[INSERT][,][UPDATE][,][DELETE]}

AS

[IF UPDATE(tên_cột)

[AND UPDATE(tên_cột)|OR UPDATE(tên_cột)]

…]

các_câu_lệnh_của_trigger

Chuẩn SQL định nghĩa hai bảng logic INSERTED DELETED để sử dụng

trong các trigger. Cấu trúc của hai bảng này tương tự như cấu trúc của bảng mà trigger

tác động. Dữ liệu trong hai bảng này tuỳ thuộc vào câu lệnh tác động lên bảng làm kích

hoạt trigger; cụ thể trong các trường hợp sau:

Khi câu lệnh DELETE được thực thi trên bảng, các dòng dữ liệu bị xoá sẽ

được sao chép vào trong bảng DELETED. Bảng INSERTED trong trường

hợp này không có dữ liệu.

Dữ liệu trong bảng INSERTED sẽ là dòng dữ liệu được bổ sung vào bảng

gây nên sự kích hoạt đối với trigger bằng câu lệnh INSERT. Bảng

DELETED trong trường hợp này không có dữ liệu.

Khi câu lệnh UPDATE được thực thi trên bảng, các dòng dữ liệu cũ chịu sự

tác động của câu lệnh sẽ được sao chép vào bảng DELETED, còn trong bảng

INSERTED sẽ là các dòng sau khi đã được cập nhật.

4.3.2 Sử dụng mệnh đề IF UPDATE trong trigger

Thay vì chỉ định một trigger được kích hoạt trên một bảng, ta có thể chỉ định

trigger được kích hoạt và thực hiện những thao tác cụ thể khi việc thay đổi dữ liệu chỉ

liên quan đến một số cột nhất định nào đó của cột. Trong trường hợp này, ta sử dụng

mệnh đề IF UPDATE trong trigger. IF UPDATE không sử dụng được đối với câu lệnh

DELETE.

4.3.3 ROLLBACK TRANSACTION và trigger

Một trigger có khả năng nhận biết được sự thay đổi về mặt dữ liệu trên bảng dữ

liệu, từ đó có thể phát hiện và huỷ bỏ những thao tác không đảm bảo tính toàn vẹn dữ

liệu. Trong một trigger, để huỷ bỏ tác dụng của câu lệnh làm kích hoạt trigger, ta sử

dụng câu lệnh:

ROLLBACK TRANSACTION

4.3.4 Sử dụng trigger trong trường hợp câu lệnh INSERT, UPDATE và DELETE có tác động đến nhiều dòng dữ liệu

Có hai giải pháp có thể sử dụng đối với vấn đề này:

Sử dụng truy vấn con.

Sử dụng biến con trỏ.

 
1 Comment

Posted by on 06/05/2008 in SQL Server 2000

 

One response to “Học SQL Server 2000

  1. Trần Thế Toàn

    15/06/2009 at 17:16

    Giải đáp giúp : ta làm gì trong trường hợp yêu cầu xây dựng trigger tự một phát biểu Ràng buộc toàn vẹn

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: