使用' GO',交易&分号

时间:2016-06-30 16:10:04

标签: sql sql-server ssms

在下面的代码中,使用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 个答案:

答案 0 :(得分:3)

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

  2. DELETE语句的顺序似乎不对。您可能首先要删除CustomerContactComsCustomerContactAddress以及CustomerContact

  3. 中的详细信息数据
  4. 如果您想避免仅删除部分信息的情况,例如,可能需要进行交易。只有CustomerContactComs而不是其余的。

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