Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Nie można wykonać usunięcia w programie View SQL Server 2005

OK, wyobraźmy sobie jedną instancję, w której wystąpi ten błąd (ponieważ nie pokazałeś swojej definicji widoku).

Załóżmy, że mamy widok:

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

czy teraz próbujemy:

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

otrzymamy wyświetlony błąd (lub podobny). Potrzebujemy więc wyzwalacza:

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

Ten wyzwalacz staje się znacznie bardziej złożony do zapisania, jeśli nie ma łatwego sposobu na skorelowanie wierszy z deleted pseudotabela, z którą należy usunąć wiersze z każdej tabeli bazowej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zdobyć NextDayofWeek, jeśli mija termin?

  2. Jak zmienić poziom zgodności bazy danych z T-SQL?

  3. Schemat z procedury składowanej

  4. Wstawianie danych pyodbc.Binary (BLOB) do kolumny obrazu SQL Server

  5. Konwersja wierszy SQL na kolumny