2012-03-07 6 views
0

저는 SQL 및 저장 프로 시저가 처음이므로 아래의 저장 프로 시저에 대한 도움이 필요합니다. 나는 서로 연결된 테이블에 있어야한다 : "사용자"와 "프로파일".사용자 및 사용자 프로필 삭제

사용자를 삭제할 때 사용자 프로필도 삭제해야하며 그 이유는 아래 SP가하는 것입니다. 그러나 SP를 실행하면 User라는 테이블에있는 모든 UserID가 표시됩니다 (물론 "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

답변

3

Profile.UserID 지정 ON DELETE CASCADE과 함께 User 테이블과 일대일 관계를 나타내는 외부 키해야합니다. 그런 다음 삭제 User 테이블의 레코드와 th의 관련 레코드 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을 추가하십시오.