Удаление пользователя и профиля пользователя - PullRequest
0 голосов
/ 07 марта 2012

Я новичок в SQL и хранимых процедурах, и мне нужна помощь с хранимой процедурой ниже. У меня есть таблицы, которые связаны друг с другом: «Пользователь» и «Профиль».

При удалении пользователя профиль пользователя также должен быть удален, и это то, что делает SP ниже. Однако при выполнении SP все идентификаторы UserID в таблице User отображаются (конечно, из-за «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

Ответы [ 4 ]

3 голосов
/ 07 марта 2012

Это утверждение является избыточным. Удалить это:

    SELECT u.UserID 
    FROM [User] AS u INNER JOIN Profile AS p
         ON u.UserID = p.UserID;
3 голосов
/ 07 марта 2012

Profile.UserID должен быть внешним ключом, указывающим отношение один-к-одному с таблицей User, с указанием ON DELETE CASCADE. Затем вы удаляете запись из таблицы User, и соответствующая запись в таблице Profile будет автоматически удалена.

1 голос
/ 07 марта 2012

SELECT совершенно не нужен и, возможно, был добавлен кем-то в качестве теста. Вы также должны добавить SET NOCOUNT ON сразу после AS BEGIN, чтобы повысить эффективность.

0 голосов
/ 07 марта 2012

Просто удалите инструкцию SELECT.На самом деле это ничего не добавляет к вашему запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...