Được rồi, hãy tưởng tượng một trường hợp mà lỗi này sẽ xảy ra (vì bạn chưa hiển thị định nghĩa chế độ xem của mình).
Giả sử chúng ta có một chế độ xem:
CREATE VIEW dbo.V1
with schemabinding
as
select 'T1' as TabName,T1ID as ID,ImportantDate from dbo.T1
union all
select 'T2',T2ID,ImportantDate from dbo.T2
bây giờ chúng ta đang cố gắng:
DELETE from dbo.V1 where ImportantDate < DATEADD(day,-90,CURRENT_TIMESTAMP)
chúng tôi sẽ nhận được lỗi bạn đã hiển thị (hoặc tương tự). Vì vậy, những gì chúng ta cần là một trình kích hoạt:
CREATE TRIGGER T_V1_D
on dbo.V1
instead of delete
as
set nocount on
delete from dbo.T1 where T1ID in (select ID from deleted where TabName = 'T1')
delete from dbo.T2 where T2ID in (select ID from deleted where TabName = 'T2')
Trình kích hoạt này phức tạp hơn đáng kể để viết nếu không có cách nào dễ dàng để tương quan các hàng từ deleted
psuedo-table với các hàng cần được xóa khỏi mỗi bảng cơ sở.