我有一个从多个表中删除记录的存储过程。 我希望所有的删除语句都能成功完成,否则无。这里的实际目的是擦除与特定用户相关的所有数据。对一批删除语句使用T-SQL Transaction?
请注意,这些数据都不以任何方式与任何其他数据相关。例如。用户数据不会被其他用户数据以任何方式引用。但是,并发客户端源可以同时访问一个用户的数据。我不知道这是否是相关
所以我把它包在BEGIN TRANSACTION ... COMMIT TRANSACTION
像这样:
CREATE PROCEDURE [dbo].[spDeleteData]
@MyID AS INT
AS
BEGIN TRANSACTION
DELETE FROM [Table1] WHERE myId = @MyID;
DELETE FROM [Table2] WHERE myId = @MyID;
....
COMMIT TRANSACTION
RETURN 0
这里我的问题是什么包装删除多在调用的影响交易?它会创建可能的死锁场景,还是以某种方式损害性能?
从我正在阅读的文章中,使用TRANSACTION ISOLATION LEVEL
仅适用于读取操作,这是真的吗?
不确定'END TRANSACTION'是什么。 [TSQL具有交易的COMMIT或ROLLBACK](https://stackoverflow.com/a/14806566/4416750)。 –
你可能想要在try/catch中包装它。否则,它不会做任何事情,而只是将表格锁定一段时间。交易有一个小的开销,但它很小,除非交易很大。 –
@LewsTherin是的,这是错字。它是固定的 –