我们是否需要在同一查询中进行多次更新的事务?

Do we need transaction with more than one update in same query?

我有一个查询有 2 个更新和 1 个删除。 我想用一个 executeNonQuery 完成所有这些。 这种情况需要交易吗?

Public Shared Sub Remove(ByRef userData As IUser, ByVal itemID As Integer)
        Dim conn As DbConnection = DbProvider.GetDbConnection(ConnectionStringHelper.GetConnectionString(userData))
        Dim cmd As DbCommand

        Const SQL As String = " UPDATE d " _
                            & "     SET DescriptionID = null  " _
                            & "     FROM table1 AS d " _
                            & "     WHERE DescriptionID = @itemID " _
                            & " UPDATE cv " _
                            & "     SET DescriptionID = null " _
                            & "     FROM table2 AS cv " _
                            & "     WHERE DescriptionID = @itemID " _
                            & " DELETE FROM table3" _
                            & "     WHERE ItemID=@itemID AND CandidateID = @UserID AND CandidateID IS NOT NULL "

        cmd = DbProvider.GetDbCommand(SQL, conn)
        cmd.Parameters.Add("@ItemID", DbType.Int32).Value = itemID
        cmd.Parameters.Add("@UserID", DbType.Int32).Value = userData.UserID

        Try
            conn.Open()
            cmd.ExecuteNonQuery()

        Finally
            conn.Close()
            conn.Dispose()
            cmd.Dispose()
        End Try
    End Sub

感谢您的帮助。

这取决于问题的答案。你(或你的company/client)是否会松动(miscalculate/miss/omit)一些东西,如果两次更新会成功,而不是删除?或者如果第一次更新成功,第二次更新不成功,删除成功。如果答案是肯定的,那么是的,你需要交易。如果对数据库执行三个操作没有带来任何不一致,那么你不需要事务。

看起来您的命令无论如何都会在单个隐式事务中执行。因此,除非您想将其全部回滚,否则您不会 'need' 显式交易。