gpt4 book ai didi

sql - 使用 'GO' 、事务和分号

转载 作者:行者123 更新时间:2023-12-01 13:43:15 25 4
gpt4 key购买 nike

在下面的代码中,GO、事务和分号的使用是否正确?

我很感激这些问题已被多次单独提出,但我在组合使用它们时遇到了困难,非常感谢您提供任何指导。

我不确定在这种情况下是否有必要使用事务。

USE TestingDB
GO

DECLARE @CustomerContactID int = 278800

BEGIN TRANSACTION

DELETE
FROM dbo.CustomerContact
WHERE CustomerContact_CustomerContactID = @CustomerContactID;


DELETE
FROM dbo.CustomerContactComs
WHERE CustomerContactComs_CustomerContactID = CustomerContactID;

DELETE
FROM dbo.CustomerContactAddress
WHERE CustomerContactAddress_CustomerContactID = @CustomerContactID;

COMMIT TRANSACTION;

最佳答案

  1. 分号 已过时 ,在 T-SQL 中不是必需的(公用表表达式和 Service Broker 语句除外,如果它们不是批处理中的第一个语句)。 因此,如果您想使用它们,这是一个品味问题。 但是 Microsoft 建议始终使用它们。 (请参阅下面的前两条评论)

  2. DELETE 语句的顺序似乎有误。您可能首先要删除 CustomerContactComsCustomerContactAddress 的详细数据,然后是 CustomerContact

  3. 如果您想避免只删除部分信息的情况,例如只有 CustomerContactComs 而不是其余的。

  4. 这直接导致GO。您不应在事务中的语句之间插入任何 GO 语句。 GO 不是 T-SQL 的一部分,但用于 Management Studio 等工具以指示单独的批处理
    因此,如果有 GO,则前面的语句将作为一批发送到服务器。如果该批中的一个语句引发错误,则该批中的其余语句将不会执行。
    但是,如果您在此处插入 GO,则以下语句将是一个新批处理,因此虽然先前的语句失败,但仍可以提交事务,这可能不是您想要的。

关于sql - 使用 'GO' 、事务和分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38128378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com