Вы должны использовать курсор или создать динамическую строку SQL (которая использует курсор, не говоря об этом). В качестве альтернативы, вы можете скопировать логику из хранимой процедуры и посмотреть, сможете ли вы настроить ее так, чтобы она стала основанной на множествах - я не рассматривал процедуру, поэтому я не уверен, возможно ли это, практично или даже возможно, но это первое, что я пытаюсь сделать перед добавлением курсоров или динамического SQL в триггер.
Для курсора, что-то вроде этого (я предполагаю, что вы передаете GUID или что-то еще, но я понятия не имею):
CREATE TRIGGER dbo.StudentAfterDelete
ON dbo.Students
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @MemberID UNIQUEIDENTIFIER;
DECLARE c CURSOR LOCAL STATIC FORWARD_ONLY READ_ONLY
FOR SELECT MemberID FROM deleted;
OPEN c;
FETCH NEXT FROM c INTO @MemberID;
WHILE @@FETCH_STATUS <> -1
BEGIN
EXEC dbo.aspnet_delete_user @MemberID;
FETCH NEXT FROM c INTO @MemberID;
END
CLOSE c;
DEALLOCATE c;
END
GO
Динамический SQL, те же предположения:
CREATE TRIGGER dbo.StudentAfterDelete
ON dbo.Students
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += 'EXEC dbo.aspnet_delete_user '''
+ CONVERT(VARCHAR(36), MemberID) + ''';' FROM deleted;
EXEC sp_executesql @sql;
END
GO
Тем не менее, включение недостающей информации заранее более полезно. Не думайте, что каждый, кто работает с SQL Server, знает, что делает aspnet_delete_user.