我在學生表中有一個觸發器,當我刪除一個學生時刪除其他表中的相關記錄。我想通過調用觸發器中的aspnet_delete_user存儲過程來刪除學生的成員數據。但是如果我刪除一個學生,這個工作就可以瞭如果我在一個查詢中移除了多個學生,那麼它不起作用。調用aspnet_delete_user SP觸發器
如何將此SP調用爲多行操作觸發器?
我在學生表中有一個觸發器,當我刪除一個學生時刪除其他表中的相關記錄。我想通過調用觸發器中的aspnet_delete_user存儲過程來刪除學生的成員數據。但是如果我刪除一個學生,這個工作就可以瞭如果我在一個查詢中移除了多個學生,那麼它不起作用。調用aspnet_delete_user SP觸發器
如何將此SP調用爲多行操作觸發器?
你必須使用遊標或者建立一個動態的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的用處。
以及我的過程的問題是,它需要一個用戶名作爲參數,所以如果我刪除多個學生,我不知道如何將這些用戶名傳遞給此Sp。使用循環?要麼 .. ? – 2012-02-22 22:13:05
@reza謝謝你糾正這個問題,但我的目標不是讓你改變接受的答案,只是爲了解釋你是如何做出決定的,因爲它沒有遵循網站的指導原則。請完整查看http://meta.stackexchange.com/questions/19448/etiquette-for-selecting-answers和http://meta.stackexchange.com/questions/19585/accepting-a-duplicate-answer-etiquette。 – 2012-02-22 23:12:20
也許是這樣的:
CREATE TRIGGER TheNameOfTheTrigger
ON YourTableYouWantToTriggerOn
AFTER DELETE
AS
DECLARE @yourPrimaryKey int
DECLARE delete_cursor CURSOR FOR
SELECT
yourPrimaryKey
FROM
deleted
OPEN delete_cursor
FETCH NEXT FROM delete_cursor
INTO @yourPrimaryKey
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC aspnet_delete_user @yourPrimaryKey
FETCH NEXT FROM delete_cursor INTO @yourPrimaryKey
END
CLOSE delete_cursor
DEALLOCATE delete_cursor
GO
+1因爲我的意圖不是爲了竊取你的接受。 – 2012-02-23 00:13:45
不'aspnet_delete_user'採取什麼參數?哪個參數映射到'inserted'僞表中的哪個列? – 2012-02-22 22:01:32