说我有说我执行使用ExecuteNonQuery(DbCommand)
从C#在Web应用程序下面的SQL语句执行一个SQL块没有中断
DECLARE @InsertedProductID INT -- this is passed as a parameter
DECLARE @GroupID INT -- this is passed as a parameter
DECLARE @total INT
SET @total = (SELECT COUNT (*) FROM Products WHERE GroupID = @GroupID)
UPDATE Products SET ProdName = 'Prod_'+ CAST(@total as varchar(15))
WHERE ProductID = @InsertedProductID
我的问题是,我想,以确保整个块执行在一。我的目标是每个组都有独特的ProdName
。如果我按照原样保留所有内容,如果insert
发生在获取@total
和执行UPDATE
之间,我很可能会得到重复的产品名称。有没有办法确保整个SQL块不中断地立即执行。 exec
或sp_executesql
会实现这个吗?我最后的办法是在ExecuteNonQuery(DbCommand)
周围放一个lock
但我不喜欢这样做,因为它会造成瓶颈。我不认为使用sql事务在这里是有帮助的,因为我不担心命令的完整性,我很担心命令的并行性。