sql >> Databasteknik >  >> RDS >> Sqlserver

Det gick inte att utföra radering på View SQL Server 2005

Okej, låt oss föreställa oss ett fall där det här felet kommer att inträffa (eftersom du inte har visat din vydefinition).

Låt oss anta att vi har en vy:

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

försöker vi nu:

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

vi får felmeddelandet du har visat (eller liknande). Så vad vi behöver är en trigger:

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

Denna utlösare blir betydligt mer komplex att skriva om det inte finns något enkelt sätt att korrelera rader från den deleted psuedo-tabell med vilka rader som måste tas bort från varje bastabell.



  1. Jämför och få de nya uppgifterna infogade i tabellen baserat på månad

  2. varför skriver man i en tabell förhindrar vakuum i en annan?

  3. internationalisering av php-webbplatsen

  4. Finns det något sätt att visa Ja eller Nej i en resultatfråga med 0 eller 1?