2012-03-07 39 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以提高效率。