sql-server - 存储过程删除 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)
解决方案
你的方法非常完美。
我会第二次将所有内容包装在事务中,因为您不希望部分删除。
需要注意的一件事是,您可能会发现还有其他表依赖于您删除的某些表。这些可能没有 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
推荐阅读
- reactjs - CSSTransition(react-transition-group),React Portal Modal 没有动画
- c++ - OpenGL:顶点缓冲区如何管理其内存?
- javascript - 反应:尝试一致地读取自定义文件会导致 index.html
- mysql - 在moodle sql报告中添加论坛参与
- mongodb - MongoDB 不会保存 url 字符串
- c - 如何使用 Scitools 理解的 C API 在 * .cpp 文件中查找特定的词位?
- mongodb - Lambda 到 Mongodb EC2 实例连接问题
- flutter - Flutter 插件——去除某些依赖
- python - 芹菜不启动任务python django
- crash - 在打开浏览器进行调试时颤动网络崩溃