我们正在使用一个 ORM,它正在执行从 .NET 到 SQL Server 的 sp_executesql 存储过程的调用。
当从 .NET 调用存储过程时,我们会收到一个超时异常。
查看 Profiler,我可以看到查询确实需要很长时间才能执行。
查询本质上是:
exec sp_executesql N'SELECT DISTINCT
FROM [OurDatabase].[dbo].[Contract] [LPLA_1] ) [LPA_L1]
LEFT JOIN [OurDatabase].[dbo].[Customer] [LPA_L2] ON [LPA_L2].[Customer_ID]=[LPA_L1].[CustomerId] AND [LPA_L2].[Data]=[LPA_L1].[Data])
WHERE ( ( ( ( ( [LPA_L1].[DealerId] = @DealerId1))
AND ( [LPA_L2].[Last_Name] = @LastName2))))',N'@DealerId1 varchar(18),@LastName2 varchar(25)',@DealerId1='1234',@LastName2='SMITH'
对我来说令人困惑的部分是:如果我将超时的查询复制并粘贴到 SQL Management Studio 并以交互方式执行它,它执行得很好。
有谁知道为什么通过 .NET 代码执行相同的查询需要更长的时间?(我能够重现这一点——从代码执行的查询始终超时,并且以交互方式执行的查询始终可以正常工作。)
任何帮助表示赞赏。谢谢!