Tải bản đầy đủ (.ppt) (44 trang)

Bài 13: TRIGGERS pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.14 MB, 44 trang )





Bài 13
Bài 13
TRIGGERS
TRIGGERS


I.
I.
GIỚI THIỆU
GIỚI THIỆU
1.
1.
TRIGGER
TRIGGER
:
:

Trigger là một loại stored procedure đặc biệt được
Trigger là một loại stored procedure đặc biệt được
thực thi một cách tự động khi có câu lệnh UPDATE,
thực thi một cách tự động khi có câu lệnh UPDATE,
INSERT, DELETE tác động vào table
INSERT, DELETE tác động vào table

Trigger là một công cụ mạnh, khi dữ liệu bị sửa đổi,
Trigger là một công cụ mạnh, khi dữ liệu bị sửa đổi,
nó sẽ tự động thực hiện việc ép buộc các giao dịch sửa


nó sẽ tự động thực hiện việc ép buộc các giao dịch sửa
đổi này thực hiện theo quy tắc đã định nhằm đảm bảo
đổi này thực hiện theo quy tắc đã định nhằm đảm bảo
tính toàn vẹn dữ liệu
tính toàn vẹn dữ liệu

Các trigger thực thi sau khi các câu lệnh bên trong nó
Các trigger thực thi sau khi các câu lệnh bên trong nó
hoàn tất, nếu có lổi thì trigger sẽ không thực thi
hoàn tất, nếu có lổi thì trigger sẽ không thực thi

Trigger tự động thực thi, không gọi trigger thi hành
Trigger tự động thực thi, không gọi trigger thi hành
một cách trực tiếp
một cách trực tiếp


I.
I.
GIỚI THIỆU
GIỚI THIỆU
2.
2.
LOẠI TRIGGERS
LOẠI TRIGGERS
: Có 2 loại
: Có 2 loại
:
:


AFTER triggers ho
AFTER triggers ho
ặc for trigger
ặc for trigger


: th
: th
ực thi sau khi
ực thi sau khi
thực hiện insert/ delete các dòng trong table, gọi là
thực hiện insert/ delete các dòng trong table, gọi là
reactive, chỉ tạo trên table. Khi tạo trigger nếu
reactive, chỉ tạo trên table. Khi tạo trigger nếu
không chỉ định rõ thì mặc định là AFTER Trigger,
không chỉ định rõ thì mặc định là AFTER Trigger,



INSTEAD OF triggers
INSTEAD OF triggers
: ki
: ki
ểm tra trứơc khi thực
ểm tra trứơc khi thực
hiện Insert/Delete, gọi là proactive, tạo trên table và
hiện Insert/Delete, gọi là proactive, tạo trên table và
view
view
Table1 có trigger1, table2 có trigger2, nếu thao tác

Table1 có trigger1, table2 có trigger2, nếu thao tác
trên table1 có liên quan đến table2 thì trigger2 tự
trên table1 có liên quan đến table2 thì trigger2 tự
động thực thi, gọi là trigger lồng (Nested Trigger)
động thực thi, gọi là trigger lồng (Nested Trigger)


I.
I.
GIỚI THIỆU
GIỚI THIỆU
For/After
For/After
Instead of
Instead of
- Chỉ áp dụng cho table
- Chỉ áp dụng cho table
- áp dụng cho table, view
- áp dụng cho table, view
- Có thể định nghĩa nhiều
- Có thể định nghĩa nhiều
trigger trên một hành động
trigger trên một hành động
I/U/ D
I/U/ D
- Chỉ định nghĩa một Trigger
- Chỉ định nghĩa một Trigger
trên một hành động I/U/D
trên một hành động I/U/D
Thực thi sau khi :

Thực thi sau khi :
+ xử lý ràng buộc
+ xử lý ràng buộc
+ thực hiện xong hành
+ thực hiện xong hành
động I/U/D phát sinh trigger
động I/U/D phát sinh trigger
- Thi hành trước khi:
- Thi hành trước khi:
+ Xử lý ràng buộc
+ Xử lý ràng buộc
+ Thay thế hành động
+ Thay thế hành động
phát sinh trigger
phát sinh trigger
- Không xây dựng được trên
- Không xây dựng được trên
table có áp dụng cascade
table có áp dụng cascade
delete/ update
delete/ update


I.
I.
GIỚI THIỆU
GIỚI THIỆU
3.
3.
SỬ DỤNG TRIGGERS

SỬ DỤNG TRIGGERS
:
:

Ràng buộc toàn vẹn dữ liệu
Ràng buộc toàn vẹn dữ liệu

Kiểm soát dữ liệu khi có sự thay đổi giá trị trong
Kiểm soát dữ liệu khi có sự thay đổi giá trị trong
bảng
bảng

Xử lý dữ liệu trên nhiều dòng
Xử lý dữ liệu trên nhiều dòng

Tạo thông báo lổi
Tạo thông báo lổi

Phát sinh giá trị tính toán
Phát sinh giá trị tính toán
3.
3.
ĐẶC ĐIỂM và HẠN CHẾ
ĐẶC ĐIỂM và HẠN CHẾ
:
:

Không ngăn ngừa thay đổi cấu trúc mà nó chỉ kiểm
Không ngăn ngừa thay đổi cấu trúc mà nó chỉ kiểm
tra sự thay đổi hay xoá dữ liệu trong các table có

tra sự thay đổi hay xoá dữ liệu trong các table có
quan hệ với nhau
quan hệ với nhau


I.
I.
GIỚI THIỆU
GIỚI THIỆU

Kiểm tra constraint trước, sau đó đến trigger
Kiểm tra constraint trước, sau đó đến trigger

Không dùng quá nhiều trigger trong một bảng
Không dùng quá nhiều trigger trong một bảng

Không tạo trigger trên đối tượng Temporary
Không tạo trigger trên đối tượng Temporary

Có thể xử lý dữ liệu trên nhiều dòng
Có thể xử lý dữ liệu trên nhiều dòng

Trong trigger không có các lệnh:create, drop, alter
Trong trigger không có các lệnh:create, drop, alter
table, alter database, truncate table, select into
table, alter database, truncate table, select into


II.
II.

TẠO TRIGGER
TẠO TRIGGER
1.
1.
T
T
ẠO TRIGGER
ẠO TRIGGER

Sử dụng công cụ Interprise Manager
Sử dụng công cụ Interprise Manager

Click phải trên tên của Table
Click phải trên tên của Table

Chọn All Tasks
Chọn All Tasks


Manage Trigger
Manage Trigger

Tạo bằng lệnh T-SQL
Tạo bằng lệnh T-SQL
:
:

Cú pháp
Cú pháp
:

:
CREATE TRIGGER
CREATE TRIGGER
trigger_name
trigger_name
ON
ON
table|View
table|View
[WITH ENCRYPTION]
[WITH ENCRYPTION]
{ FOR | AFTER| INSTEAD OF }
{ FOR | AFTER| INSTEAD OF }
{ [INSERT] [,] [UPDATE] [,] [DELETE] }
{ [INSERT] [,] [UPDATE] [,] [DELETE] }
[WITH APPEND] [NOT FOR REPLICATION]
[WITH APPEND] [NOT FOR REPLICATION]
AS
AS
sql_statement
sql_statement
[ . . .
[ . . .
n
n
]
]


II.

II.
TẠO TRIGGER
TẠO TRIGGER
Thông tin về trigger được lưu trong table sysObjects
Thông tin về trigger được lưu trong table sysObjects
và syscommands
và syscommands
sp_helptext Trigger_Name
sp_helptext Trigger_Name
sp_helptrigger Table_Name
sp_helptrigger Table_Name
sp_depends Table_Name
sp_depends Table_Name
V
V
í dụ 1:
í dụ 1:
Create trigger trAddAuthor
Create trigger trAddAuthor
On Authors For Insert, update
On Authors For Insert, update
As
As
raiserror(“%d row have been
raiserror(“%d row have been
modified”,0,1,@@rowcount)
modified”,0,1,@@rowcount)
Return
Return



II.
II.
TẠO TRIGGER
TẠO TRIGGER

Trigger trAddAuthor sẽ khởi động khi người sử dụng
Trigger trAddAuthor sẽ khởi động khi người sử dụng
cập nhật hoặc chèn dữ liệu vào bảng Author
cập nhật hoặc chèn dữ liệu vào bảng Author
Ví dụ:
Ví dụ:
Insert authors (‘555-66-7777’,’Frog’,’Kermit’,’8000-444-
Insert authors (‘555-66-7777’,’Frog’,’Kermit’,’8000-444-
5656’,’123 Sesame Street’,’West EastBrooke’, ’CA’,
5656’,’123 Sesame Street’,’West EastBrooke’, ’CA’,
’90221’, 0)
’90221’, 0)


II.
II.
TẠO TRIGGER
TẠO TRIGGER
VD2
VD2
: Create table SANPHAM
: Create table SANPHAM
(masp int not null, tensp nvarchar(30) not null,
(masp int not null, tensp nvarchar(30) not null,



mancc nvarchar(5), dvtinh nvarchar(10), soluong int,
mancc nvarchar(5), dvtinh nvarchar(10), soluong int,


dongia int )
dongia int )
CREATE TRIGGER chenSP
CREATE TRIGGER chenSP
ON SANPHAM FOR INSERT
ON SANPHAM FOR INSERT
AS
AS
RAISERROR('"CO %d DONG DA DUOC CHEN VAO
RAISERROR('"CO %d DONG DA DUOC CHEN VAO
BANG"',0,1,@@ROWCOUNT)
BANG"',0,1,@@ROWCOUNT)
RETURN
RETURN
INSERT INTO sp VALUES (1,'man hinh','101','CAI',20,150)
INSERT INTO sp VALUES (1,'man hinh','101','CAI',20,150)


II.
II.
TẠO TRIGGER
TẠO TRIGGER
2.
2.

Trigger tự động thực thi khi gặp 3 biến cố:
Trigger tự động thực thi khi gặp 3 biến cố:

Insert Trigger
Insert Trigger
: M
: M
ệnh đề For Insert thực thi khi có
ệnh đề For Insert thực thi khi có
một record được thêm vào bảng, SQL tạo ra bảng
một record được thêm vào bảng, SQL tạo ra bảng
INSERTED lưu record được chèn, bảng này tồn tại
INSERTED lưu record được chèn, bảng này tồn tại
trong quá trình trigger thực thi
trong quá trình trigger thực thi

Delete Trigger
Delete Trigger
: Trigger thực thi khi có record bị
: Trigger thực thi khi có record bị
xoá, SQL tạo ra bảng DELETED để lưu record bị
xoá, SQL tạo ra bảng DELETED để lưu record bị
xoá
xoá

Update Trigger
Update Trigger
: Khi có record được cập nhật, giá
: Khi có record được cập nhật, giá
trị của các cột có liên quan đến trigger sẽ được

trị của các cột có liên quan đến trigger sẽ được
kiểm tra trứơc khi cập nhật, mẫu tin đựơc cập nhật
kiểm tra trứơc khi cập nhật, mẫu tin đựơc cập nhật
sẽ được lưu vào bảng INSERTED (mẫu tin mới
sẽ được lưu vào bảng INSERTED (mẫu tin mới
được cập nhật) và bảng DELETED (mẫu tin cũ)
được cập nhật) và bảng DELETED (mẫu tin cũ)


III.
III.
AFTER TRIGGERS
AFTER TRIGGERS
a)
a)
Insert Trigger
Insert Trigger
:
:


dụ 1
dụ 1
:
:
CREATE TRIGGER Trg_NgayLap_NgayGiaoHD
CREATE TRIGGER Trg_NgayLap_NgayGiaoHD
ON Hoadon AFTER INSERT
ON Hoadon AFTER INSERT
AS

AS
DECLARE @NgayLapHD DateTime, @NgayGiao DateTime
DECLARE @NgayLapHD DateTime, @NgayGiao DateTime
SELECT @NgayLapHD=hd.NGayLapHD,
SELECT @NgayLapHD=hd.NGayLapHD,
@NgayGiao=hd.NgayGiaoNhan
@NgayGiao=hd.NgayGiaoNhan
FROM HoaDon hd INNER JOIN Inserted i ON hd.MaHD=i.Mahd
FROM HoaDon hd INNER JOIN Inserted i ON hd.MaHD=i.Mahd
If @NgayGiao<@NgayLapHD
If @NgayGiao<@NgayLapHD
BEGIN
BEGIN
RAISERROR(500103,10,1)
RAISERROR(500103,10,1)
ROLLBACK TRANSACTION
ROLLBACK TRANSACTION
END
END


III.
III.
AFTER TRIGGERS
AFTER TRIGGERS
Th
Th
ực hiện lệnh Insert
ực hiện lệnh Insert



INSERT HoaDon
INSERT HoaDon
VALUES (1003,'1/1/2004','N','TP. HCM', ‘03/03/2004‘,’DHCN’)
VALUES (1003,'1/1/2004','N','TP. HCM', ‘03/03/2004‘,’DHCN’)
2
MaHD
MaHD
NgayLapHD
NgayLapHD
LoaiHD
LoaiHD
NoiChuyen
NoiChuyen
NgayGiao
NgayGiao
MaKH
MaKH
1001
1001
12/23/2003
12/23/2003
N
N
Tp. HCM
Tp. HCM
12/28/2003
12/28/2003
CDCN4
CDCN4

1002
1002
01/01/2004
01/01/2004
X
X
Can Tho
Can Tho
01/05/2004
01/05/2004
DHCT
DHCT
1003
1003
01/01/2004
01/01/2004
N
N
Tp. HCM
Tp. HCM
03/03/2004
03/03/2004
DHCN
DHCN
MaHD
MaHD
NgayLapHD
NgayLapHD
LoaiHD
LoaiHD

NoiChuyen
NoiChuyen
NgayGiao
NgayGiao
MaKH
MaKH
1003
1003
01/01/2004
01/01/2004
N
N
Tp. HCM
Tp. HCM
03/03/2004
03/03/2004
DHCN
DHCN
1
3
INSERT Trigger
Inserted Table


II.
II.
AFTER TRIGGERS
AFTER TRIGGERS
b)
b)

Delete Trigger
Delete Trigger
: C
: C
ó 3 phương thức thực hiện tham
ó 3 phương thức thực hiện tham
chiếu toàn vẹn khi sử dụng
chiếu toàn vẹn khi sử dụng
Delete Trigger
Delete Trigger

The Cascade method
The Cascade method

The Restrict method
The Restrict method

The Nullify method
The Nullify method
V
V
í dụ: tạo một trigger xoá một record trong bảng hoá
í dụ: tạo một trigger xoá một record trong bảng hoá
đơn
đơn


II.
II.
AFTER TRIGGERS

AFTER TRIGGERS
CREATE
CREATE TRIGGER Trg_Xoa_HD
ON Hoadon AFTER DELETE
AS
SET NOCOUNT ON
IF EXISTS (SELECT * FROM Deleted)
BEGIN
DELETE CT_HOADON WHERE CT_HOADON.MaHD
IN (SELECT hd.MaHD FROM HoaDon hd
INNER JOIN Deleted d ON hd.MaHD=d.Mahd)
RAISERROR('Cac chi tiet HD da bi xoa',10,1)
END
SET NOCOUNT ON



III.
III.
AFTER TRIGGERS
AFTER TRIGGERS
MaHD
MaHD
NgayLapHD
NgayLapHD
LoaiHD
LoaiHD
NoiChuyen
NoiChuyen
NgayGiao

NgayGiao
MaKH
MaKH
1001
1001
12/23/2003
12/23/2003
N
N
Tp. HCM
Tp. HCM
12/28/2003
12/28/2003
CDCN4
CDCN4
1002
1002
01/01/2004
01/01/2004
X
X
Can Tho
Can Tho
01/05/2004
01/05/2004
DHCT
DHCT
1003
1003
01/01/2004

01/01/2004
N
N
Tp. HCM
Tp. HCM
03/03/2004
03/03/2004
DHCN
DHCN
MaHD
MaHD
NgayLapHD
NgayLapHD
LoaiHD
LoaiHD
NoiChuyen
NoiChuyen
NgayGiao
NgayGiao
MaKH
MaKH
1003
1003
01/01/2004
01/01/2004
N
N
Tp. HCM
Tp. HCM
03/03/2004

03/03/2004
DHCN
DHCN
DELETED Table
3
DELETED Trigger
DELETE HoaDon WHERE MaHD=1003
1
2


II.
II.
TẠO VÀ HIỆU CHỈNH TRIGGER
TẠO VÀ HIỆU CHỈNH TRIGGER
Vi dụ:
Vi dụ:
CREATE TRIGGER NoDelete
CREATE TRIGGER NoDelete
ON Product
ON Product
FOR DELETE AS
FOR DELETE AS
IF(SELECT ProductID FROM Deleted )=12
IF(SELECT ProductID FROM Deleted )=12
BEGIN
BEGIN
Print ‘You cannot delete the Productid=12’
Print ‘You cannot delete the Productid=12’
RollBack transaction

RollBack transaction
END
END


III.
III.
AFTER TRIGGERS
AFTER TRIGGERS
c)
c)
Update Trigger
Update Trigger
:
:
Ví dụ:
Ví dụ:
UPDATED HoaDon SET MaKH=‘TH3’ WHERE MaHD=1003
UPDATED HoaDon SET MaKH=‘TH3’ WHERE MaHD=1003
2
MaHD
MaHD
NgayLapHD
NgayLapHD
LoaiHD
LoaiHD
NoiChuyen
NoiChuyen
NgayGiao
NgayGiao

MaKH
MaKH
1001
1001
12/23/2003
12/23/2003
N
N
Tp. HCM
Tp. HCM
12/28/2003
12/28/2003
CDCN4
CDCN4
1002
1002
01/01/2004
01/01/2004
X
X
Can Tho
Can Tho
01/05/2004
01/05/2004
DHCT
DHCT
1003
1003
01/01/2004
01/01/2004

N
N
Tp. HCM
Tp. HCM
03/03/2004
03/03/2004
CDCN4
CDCN4
MaHD
MaHD
NgayLapHD
NgayLapHD
LoaiHD
LoaiHD
NoiChuyen
NoiChuyen
NgayGiao
NgayGiao
MaKH
MaKH
1003 01/01/2004 N Tp. HCM 03/03/2004 TH3
1
3
UPDATED Trigger
MaHD
MaHD
NgayLapHD
NgayLapHD
LoaiHD
LoaiHD

NoiChuyen
NoiChuyen
NgayGiao
NgayGiao
MaKH
MaKH
1003
1003
01/01/2004
01/01/2004
N
N
Tp. HCM
Tp. HCM
03/03/2004
03/03/2004
CDCN4
CDCN4
INSERTED Table
DELETED Table


III.
III.
AFTER TRIGGERS
AFTER TRIGGERS


dụ:
dụ:

CREaTE TRIGGER NoUppdate
CREaTE TRIGGER NoUppdate
ON Product
ON Product
FOR Update
FOR Update
IF Update(ProductID)
IF Update(ProductID)
BEGIN
BEGIN
PRINT ‘You cannot update Productid’
PRINT ‘You cannot update Productid’
RollBack Transaction
RollBack Transaction
END
END


III.
III.
AFTER TRIGGERS
AFTER TRIGGERS
VD:
VD:
CREATE TRIGGER NoupdareOrders
CREATE TRIGGER NoupdareOrders
ON Orders
ON Orders
FOR Update AS
FOR Update AS

IF (Select OrderDate from Inserted) > Getdate()
IF (Select OrderDate from Inserted) > Getdate()
BEGIN
BEGIN
Print ‘Ngay lap hoa don phai nho hon hoac
Print ‘Ngay lap hoa don phai nho hon hoac
bang ngay hien hanh’
bang ngay hien hanh’
RollBack Transaction
RollBack Transaction
END
END


IV.
IV.
INSTEAD OF
INSTEAD OF


TRIGGERS
TRIGGERS
INSTEAD of Trigger:
INSTEAD of Trigger:
chỉ có ở SQL Server 2000, thi hành
chỉ có ở SQL Server 2000, thi hành
thay cho các câu lệnh Insert, Delete, Update do đó khi
thay cho các câu lệnh Insert, Delete, Update do đó khi
tạo trigger kiểu này ta phải viết lại các câu lệnh Insert,
tạo trigger kiểu này ta phải viết lại các câu lệnh Insert,

Delete, Update đối với dữ liệu, có thể áp dụng cho
Delete, Update đối với dữ liệu, có thể áp dụng cho
table và view, trừ các view có WITH CHECK
table và view, trừ các view có WITH CHECK
OPTION
OPTION
1.
1.
INSTEAD OF INSERT Trigger
INSTEAD OF INSERT Trigger
: gi
: gi
ống như
ống như
AFTER
AFTER
trigger
trigger
, INSTEAD of
, INSTEAD of
INSERT
INSERT
Trigger
Trigger
l
l
àm việc với
àm việc với
bảng
bảng



Inserted. Khi th
Inserted. Khi th
ực thi câu lệnh
ực thi câu lệnh
INSERT
INSERT
N
N
ếu record không vi phạm các ràng buộc thì nó được
ếu record không vi phạm các ràng buộc thì nó được
chèn vào bảng Inserted, không chèn vào bảng cơ sở
chèn vào bảng Inserted, không chèn vào bảng cơ sở
Trigger k
Trigger k
ích hoạt và thực thi những hành động cần
ích hoạt và thực thi những hành động cần
thiết
thiết
.
.


IV.
IV.
INSTEAD OF
INSTEAD OF



TRIGGERS
TRIGGERS
VD: CREATE TRIGGER InsOrdDet ON [Order Details]
VD: CREATE TRIGGER InsOrdDet ON [Order Details]
INSTEAD OF INSERT
INSTEAD OF INSERT
AS
AS
DECLARE @qty int
DECLARE @qty int
SELECT @qty=quantity FROM Inserted
SELECT @qty=quantity FROM Inserted
IF @qty<= (SELECT UnitsInStock FROM Products P
IF @qty<= (SELECT UnitsInStock FROM Products P
JOIN Inserted I ON P.ProductID = I.ProductID)
JOIN Inserted I ON P.ProductID = I.ProductID)
INSERT INTO [Order Details]
INSERT INTO [Order Details]
SELECT * FROM Inserted
SELECT * FROM Inserted
ELSE
ELSE
RAISERROR(‘Not enough products in stock’, 16, 1)
RAISERROR(‘Not enough products in stock’, 16, 1)


IV.
IV.
INSTEAD OF
INSTEAD OF



TRIGGERS
TRIGGERS
2.
2.
INSTEAD OF DELETE Trigger:
INSTEAD OF DELETE Trigger:
Khi th
Khi th
ực thi câu lệnh
ực thi câu lệnh
DELETE.
DELETE.

N
N
ếu record không vi phạm các Constraint
ếu record không vi phạm các Constraint
, th
, th
ì nó
ì nó
chỉ được Insert vào bảng
chỉ được Insert vào bảng
Deleted.
Deleted.

Trigger k
Trigger k

ích hoạt và thực thi những hành động cần
ích hoạt và thực thi những hành động cần
thiết
thiết
2.
2.
INSTEAD OF UPDATE Trigger
INSTEAD OF UPDATE Trigger
:
:


l
l
àm việc với bảng
àm việc với bảng


Inserted and Deleted l
Inserted and Deleted l
ưu trữ giá trị trứơc và sau
ưu trữ giá trị trứơc và sau
update
update
. Kh
. Kh
ông update dữ liệu trong bảng cơ sở
ông update dữ liệu trong bảng cơ sở



IV.
IV.
INSTEAD OF
INSTEAD OF


TRIGGERS
TRIGGERS
Khi thực thi câu lệnh Update
Khi thực thi câu lệnh Update
Nếu record không vi phạm các ràng buộc, thì record cũ
Nếu record không vi phạm các ràng buộc, thì record cũ
được inserted vào bảng
được inserted vào bảng
Deleted, record m
Deleted, record m
ới được
ới được
insert vào bảng
insert vào bảng
Inserted
Inserted
Trigger k
Trigger k
ích hoạt và thực thi các hành động cần thiết
ích hoạt và thực thi các hành động cần thiết
L
L
ưu ý
ưu ý

:
:
INSTEAD OF UPDATE trigger kh
INSTEAD OF UPDATE trigger kh
ông được định
ông được định
nghĩa trên table
nghĩa trên table
c
c
ó tuỳ chọn
ó tuỳ chọn
ON UPDATE
ON UPDATE
CASCADE trong r
CASCADE trong r
àng buộc
àng buộc
FOREIGN KEY
FOREIGN KEY


IV.
IV.
INSTEAD OF
INSTEAD OF


TRIGGERS
TRIGGERS


Đối với view
Đối với view
:
:
INSTEAD OF triggers c
INSTEAD OF triggers c
ó ích với
ó ích với
views v
views v
ì
ì


ch
ch
úng có thể
úng có thể
n
n
âng cao khả năng cập nhật của view
âng cao khả năng cập nhật của view
.
.
VD:
VD:
CREATE VIEW [Alphabetical list of products]
CREATE VIEW [Alphabetical list of products]
AS

AS
SELECT Products.*, Categories.CategoryName
SELECT Products.*, Categories.CategoryName
FROM Categories INNER JOIN Products
FROM Categories INNER JOIN Products
ON Categories.CategoryID = Products.CategoryID
ON Categories.CategoryID = Products.CategoryID
WHERE Products.Discontinued=0
WHERE Products.Discontinued=0

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×