2012-03-07 36 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を追加してください。

関連する問題