在下面的代码中,使用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;
答案 0 :(得分:3)
在T-SQL中,分号是过时的(公用表表达式和Service Broker语句除外,如果它们不是批处理中的第一个语句)。 如果您想使用它们,那就是品味问题。但Microsoft建议始终使用它们。 (见下面的前两条评论)
DELETE
语句的顺序似乎不对。您可能首先要删除CustomerContactComs
和CustomerContactAddress
以及CustomerContact
如果您想避免仅删除部分信息的情况,例如,可能需要进行交易。只有CustomerContactComs
而不是其余的。
直接导致GO
。您不应在事务中的语句之间插入任何GO
语句。 GO
不是T-SQL的一部分,但用于管理Studio等工具,以表示单独的批次。
因此,如果存在GO
,则先前的语句将作为一个批次发送到服务器。如果该批次中的一个语句引发错误,则不会执行该批次的其余语句
但是如果您在此处插入GO
,则以下语句将是新批处理,因此事务可以提交,尽管先前的语句失败,这可能是不是你想要的。