Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Löschvorgang auf View SQL Server 2005 nicht möglich

Okay, stellen wir uns einen Fall vor, in dem dieser Fehler auftritt (da Sie Ihre Ansichtsdefinition nicht gezeigt haben).

Nehmen wir an, wir haben eine Ansicht:

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

versuchen wir jetzt:

DELETE from dbo.V1 where ImportantDate < DATEADD(day,-90,CURRENT_TIMESTAMP)

Wir erhalten den von Ihnen angezeigten Fehler (oder einen ähnlichen). Was wir also brauchen, ist ein Auslöser:

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')

Das Schreiben dieses Triggers wird erheblich komplexer, wenn es keine einfache Möglichkeit gibt, Zeilen aus deleted zu korrelieren Pseudo-Tabelle, mit der Zeilen aus jeder Basistabelle gelöscht werden müssen.