2016-05-26 4 views
1

TSQLのトリガに関する質問があります。Do triggersは他のトリガーを実行させますか?

CREATE TRIGGER DeleteCompany 
    ON [dbo].[Companies] 
    INSTEAD OF DELETE 
AS 
    DELETE FROM [dbo].[Employees] 
    WHERE CompanyId IN (SELECT Id FROM deleted)  
GO 

CREATE TRIGGER DeleteEmployee 
    ON [dbo].[Employees] 
    INSTEAD OF DELETE 
AS 
    DELETE FROM [dbo].[Tasks] 
    WHERE EmployeeId IN (SELECT Id FROM deleted)   
GO 

これまでのところは良い:

Companies 
--------- 
Id 

Employees 
--------- 
Id 
CompanyId 

Tasks 
----- 
EmployeeId 

は、今私は、トップ2のテーブルCompaniesEmployeesのための2つのトリガを作成:

のは、私は3つのテーブルがあるとしましょう。今、私が会社を削除すると、DeleteCompanyトリガーが実行され、マップEmployeesが削除されます。私の質問は、これによってトリガーDeleteEmployeeが実行されますか?基本的にこれをやろうとしていますが、最初のトリガー(DeleteCompany)だけが実行されるためです。

+2

(https://msdn.microsoft.com/en-us/library/ms190739.aspx)[ネストされたトリガを作成](私はによって発見'sql server recursive triggers 'の検索 - この検索や類似のドキュメントが見つからないとしました) –

+0

私は再帰的なトリガーもネストされたトリガーも知りませんでした。 "すべての行を削除しないトリガー"と "実行していないすべてのトリガー"を検索しました – LeonidasFett

+0

トップレベルのトリガーはどういう意味ですか?私はあなたが会社にいないときに彼の「仕事」、「従業員情報」をすべて削除しようとしていると思う。なぜあなたのために恋人なのですか? – TheGameiswar

答えて

0

OK問題が見つかりました。私は少しINSTEAD OFが実際に何をしているのか混乱していました。このトリックと希望カスケード効果が達成されて削除さん

CREATE TRIGGER DeleteCompany 
    ON [dbo].[Companies] 
    INSTEAD OF DELETE 
AS 
    DELETE FROM [dbo].[Employees] 
    WHERE CompanyId IN (SELECT Id FROM deleted) 

    DELETE [dbo].[Companies] WHERE [dbo].[Companies].Id IN (SELECT Id FROM deleted) 
GO 

CREATE TRIGGER DeleteEmployee 
    ON [dbo].[Employees] 
    INSTEAD OF DELETE 
AS 
    DELETE FROM [dbo].[Tasks] 
    WHERE EmployeeId IN (SELECT Id FROM deleted) 

    DELETE [dbo].[Employees] WHERE [dbo].[Employees].Id IN (SELECT Id FROM deleted)    
GO 

:それは完全に私はそれはそうのようなリファレンスです削除した後、私は実際のレコードを削除しなければならなかったDELETEを置き換え、判明します。

これは、この実現に私を導いたポストです:Link

関連する問題