Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Không thể thực hiện xóa trên View SQL Server 2005

Đượ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ở.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 Thói quen giám sát cơ sở dữ liệu của các DBA thành công

  2. Sự khác biệt giữa Scope_Identity (), Identity (), @@ Identity và Ident_Current () là gì?

  3. SQL:GIỮA với <=và> =

  4. Chuyển đổi ‘datetime’ thành ‘datetime2’ trong SQL Server (Ví dụ T-SQL)

  5. Giá trị SQL Server 2008 GEOGRAPHY STDistance ()