我正在使用SQL Server 2008 Enterprise。我想知道如果多个线程同时执行此存储过程是否会导致死锁?另一个问题是 - 我们在存储过程中定义开始和结束事务,或者从客户端代码定义开始和结束事务(例如ADO.Net代码)是最佳实践吗?
create PROCEDURE [dbo].[FooProc]
(
@Param1 int
,@Param2 int
,@Param3 int
)
AS
DELETE FooTable WHERE Param1 = @Param1
INSERT INTO FooTable
(
Param1
,Param2
,Param3
)
VALUES
(
@Param1
,@Param2
,@Param3
)
DECLARE @ID bigint
SET @ID = ISNULL(@@Identity,-1)
IF @ID > 0
BEGIN
SELECT IdentityStr FROM FooTable WHERE ID = @ID
END
提前谢谢,
乔治
答案 0 :(得分:2)
回答问题的唯一可靠方法是run your own stress tests
答案 1 :(得分:1)
您提供的代码可能导致死锁。即使存储过程完全由以下语句组成,也可能发生死锁。
DELETE FooTable WHERE Param1 = @Param1
取决于确切的表格定义和可用的索引(您在问题中遗漏了这些内容)。