2011-06-07 18 views
0

我無法對View執行刪除操作。一切工作都很好,在單獨的表。無法在View上執行刪除SQL Server 2005

EDIT1:增加觸發

CREATE TRIGGER myTrigger 
ON [ViewName] 
INSTEAD OF DELETE 
AS 
DELETE 
FROM [ViewName] 
WHERE [ColumnName] < DATEADD(Day, -90, GETDATE()) 

我加入了觸發

View or Function "blah" is not updateable because the modification affects multiple base tables> 
+1

該消息看起來很清楚。 – 2011-06-07 15:55:13

+0

@天使...什麼? – Magnus 2011-06-07 16:20:49

+0

添加了觸發器。它執行但不刪除一個東西。 – sealz 2011-06-07 17:41:57

回答

1

好吧,讓我們想象一下發生此錯誤的一個實例(因爲您沒有顯示您的視圖定義)。

假設我們有一個觀點:

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僞表中的行與行需要從每個基表中刪除相關沒有簡單的方法。

+0

謝謝。這將它們結合在一起。 – sealz 2011-06-07 18:08:34

0

你從多個表中引用列前得到了以下錯誤? 如果這樣,錯誤聽起來很直截了當。

但是,您可以使用存儲過程而不是視圖來執行此操作。