Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Não é possível executar a exclusão no View SQL Server 2005


Ok, vamos imaginar uma instância em que esse erro ocorrerá (já que você não mostrou sua definição de visualização).

Vamos supor que temos uma visão:
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

é que agora tentamos:
DELETE from dbo.V1 where ImportantDate < DATEADD(day,-90,CURRENT_TIMESTAMP)

receberemos o erro que você mostrou (ou similar). Então, o que precisamos é de um gatilho:
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')

Esse gatilho fica consideravelmente mais complexo para escrever se não houver uma maneira fácil de correlacionar as linhas do deleted psuedo-table com a qual as linhas precisam ser excluídas de cada tabela base.