2012-03-07 41 views
0

我是SQL和存儲過程的新手,需要以下存儲過程的幫助。我必須要互相連接的表格:「用戶」和「個人資料」。刪除用戶和用戶配置文件

刪除用戶時,用戶配置文件也應該刪除,這就是下面的SP。但是,當執行SP時,表中的所有用戶標識都會顯示出來(當然是因爲「SELECT UserID」),這是我不想要的。

所以,我想我的問題是如何編寫SP使其作品不使用SELECT?提前

感謝。

CREATE PROCEDURE usp_DeleteUser 
@UserID int 
AS 
BEGIN 
    BEGIN TRY 
    BEGIN TRANSACTION; 
     SELECT u.UserID 
     FROM [User] AS u INNER JOIN Profile AS p 
      ON u.UserID = p.UserID; 

     DELETE FROM Profile 
     WHERE UserID = @UserID; 

     DELETE FROM [User] 
     WHERE UserID = @UserID; 

    COMMIT TRANSACTION; 
    END TRY 
    BEGIN CATCH 
     ROLLBACK TRANSACTION 
     RAISERROR ('Borttagningen gick inte att genomföra!',16,1) 
    END CATCH 
END 
GO 
+1

只要刪除'SELECT' - 它對刪除沒有任何作用。 – Oded 2012-03-07 15:44:31

回答

3

Profile.UserID應該是一個外鍵指示與User表一比一的關係,與指定ON DELETE CASCADE,然後刪除來自User表的記錄以及相關的記錄e Profile表將被自動刪除。

3

此聲明是多餘的。刪除它:

SELECT u.UserID 
    FROM [User] AS u INNER JOIN Profile AS p 
     ON u.UserID = p.UserID; 
0

只要刪除SELECT語句。這實際上並沒有爲您的查詢添加任何內容。

1

SELECT是完全不必要的,可能被某人添加爲測試。您還應該在AS BEGIN之後加SET NOCOUNT ON以提高效率。