我似乎無法讓我的觸發器正常工作,我得到的錯誤「Subquery返回的值超過1。當子查詢遵循=,!=,<,<,< =,>,> =或當子查詢用作表達式「執行級聯觸發器返回錯誤「子查詢返回的值超過1,這是不允許的」
時允許我創建了幾個用於實現級聯刪除效果的觸發器。我使用EF雖然我不能使用它的級聯刪除功能,因爲我的數據庫中有多個刪除路徑。
無論如何,每次我刪除一家公司,因此執行DeleteCompany觸發器,我會得到上述錯誤。我曾嘗試拿出一些我認爲是錯誤原因的觸發器,但我每次都得到它。
這裏是我的觸發器:
CREATE TRIGGER DeleteCompany
ON [dbo].[CompanySet]
INSTEAD OF DELETE
AS
DELETE FROM [dbo].[EmployeeSet]
WHERE CompanyId = (SELECT Id FROM deleted)
DELETE FROM [dbo].[TemplateSet]
WHERE CompanyId = (SELECT Id FROM deleted)
DELETE FROM [dbo].[SettingSet]
WHERE CompanyId = (SELECT Id FROM deleted) AND EmployeeId = NULL
DELETE FROM [dbo].[CustomerSet]
WHERE CompanyId = (SELECT Id FROM deleted)
GO
CREATE TRIGGER DeleteEmployee
ON [dbo].[EmployeeSet]
INSTEAD OF DELETE
AS
DELETE FROM [dbo].[SettingSet]
WHERE EmployeeId = (SELECT Id FROM deleted)
DELETE FROM [dbo].[FavoriteSet]
WHERE EmployeeId = (SELECT Id FROM deleted)
DELETE FROM [dbo].[ProjectEmployeeSet]
WHERE EmployeeId = (SELECT Id FROM deleted)
DELETE FROM [dbo].[ActivityBaseSet]
WHERE EmployeeId = (SELECT Id FROM deleted)
DELETE FROM [dbo].[ActivityReportSet]
WHERE EmployeeId = (SELECT Id FROM deleted)
GO
CREATE TRIGGER DeleteRole
ON [dbo].[RoleSet]
INSTEAD OF DELETE
AS
DELETE FROM [dbo].[AccountRoleSet]
WHERE RolesId = (SELECT Id FROM deleted)
GO
CREATE TRIGGER DeleteCustomer
ON [dbo].[CustomerSet]
INSTEAD OF DELETE
AS
DELETE FROM [dbo].[ProjectSet]
WHERE CustomerId = (SELECT Id FROM deleted)
GO
CREATE TRIGGER DeleteProject
ON [dbo].[ProjectSet]
INSTEAD OF DELETE
AS
DELETE FROM [dbo].[TemplateSet]
WHERE ProjectId = (SELECT Id FROM deleted)
DELETE FROM [dbo].[ActivityBaseSet_Activity]
WHERE ProjectId = (SELECT Id FROM deleted)
DELETE FROM [dbo].[ActivityReportSet]
WHERE ProjectId = (SELECT Id FROM deleted)
DELETE FROM [dbo].[FavoriteSet]
WHERE ProjectId = (SELECT Id FROM deleted)
DELETE FROM [dbo].[ProjectEmployeeSet]
WHERE ProjectId = (SELECT Id FROM deleted)
GO
CREATE TRIGGER DeleteSettingDefinition
ON [dbo].[SettingDefinitionSet]
INSTEAD OF DELETE
AS
DELETE FROM [dbo].[SettingSet]
WHERE SettingDefinitionId = (SELECT Id FROM deleted)
GO
CREATE TRIGGER DeleteTemplate
ON [dbo].[TemplateSet]
INSTEAD OF DELETE
AS
UPDATE [dbo].[ActivityReportSet] SET [dbo].[ActivityReportSet].TemplateId = NULL
FROM deleted
WHERE [dbo].[ActivityReportSet].TemplateId = deleted.Id
GO
我失去了一些東西在這裏?
雖然我仍然有一些未刪除實體由於某種原因,在我的EmployeeSet和CustomerSet表中,這看起來有伎倆,只要第二個問題不在於IN關鍵字的用法。 – LeonidasFett