首页 > 解决方案 > 存储过程删除 Microsoft SQL Server 管理

问题描述

在 Microsoft SQL Server Management Studio 中,我必须创建一个存储过程来删除与该客户关联的客户和外键记录,但我不能使用级联,我必须使用删除语句显式删除记录。

我是查询/数据库的新手,我不确定我所做的是否是正确的方法,或者它甚至可能是我正在使用的级联。如果有人能给我他们的想法,那就太好了。

CREATE PROCEDURE uspDeleteCust1;
    @CustomerId1 INT;
AS;
BEGIN;
    DELETE FROM Accounts1 WHERE CustomerId1 = @CustomerId1;
    DELETE FROM Associations1 WHERE CustomerAId1 = @CustomerId1;
    DELETE FROM Associations1 WHERE CustomerBId1 = @CustomerId1;
    DELETE FROM Customers1 WHERE CustomerId1 = @CustomerId1;
END;

执行 uspDeleteCust1; 2; - (ID)

标签: sql-serverstored-procedures

解决方案


你的方法非常完美。

我会第二次将所有内容包装在事务中,因为您不希望部分删除。

需要注意的一件事是,您可能会发现还有其他表依赖于您删除的某些表。这些可能没有 CustID 列。因此,您需要通过子查询删除-

EG(我编了这张表,但你明白了)

DELETE FROM account1_transaction Where AccountId IN 
(Select accountid from Account1 WHERE customerId = @CustomerId)

最后 - 我会使用 TRY.. CATCH 因为它可以更容易地决定是提交还是回滚事务

例如

    BEGIN TRY

    BEGIN TRANSACTION

        DELETE FROM Accounts1 WHERE CustomerId1 = @CustomerId1;
        DELETE FROM Associations1 WHERE CustomerAId1 = @CustomerId1;
        DELETE FROM Associations1 WHERE CustomerBId1 = @CustomerId1;
        DELETE FROM Customers1 WHERE CustomerId1 = @CustomerId1;

    COMMIT
    END TRY

BEGIN CATCH

ROLLBACK

END CATCH

推荐阅读