Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Не може да се извърши изтриване на View SQL Server 2005

Добре, нека си представим един случай, в който ще възникне тази грешка (тъй като не сте показали дефиницията на вашия изглед).

Да приемем, че имаме изглед:

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

сега правим опит:

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

ще получим грешката, която сте показали (или подобна). Така че това, от което се нуждаем, е тригер:

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

Този тригер става значително по-сложен за писане, ако няма лесен начин за корелиране на редове от deleted псевдо-таблица, с която трябва да се изтрият редове от всяка базова таблица.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Запитване за XML типове данни, които имат атрибути на xmlns възел

  2. използвайки функцията Object_id() с #tables

  3. Всички възможни комбинации за данни от две колони

  4. Как да направите CONTAINS() на две колони на SQL за търсене в индекс на пълен текст

  5. Как да открием дали дадена стойност съдържа поне едно число в SQL Server