.NETからSQLServerのsp_executesqlストアドプロシージャへの呼び出しを実行しているORMを使用しています。
ストアドプロシージャが.NETから呼び出されると、タイムアウト例外が発生します。
プロファイラーを見ると、クエリの実行に実際に長い時間がかかっていることがわかります。
クエリは基本的に次のとおりです。
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'
私にとって紛らわしい部分は次のとおりです。タイムアウトしたクエリをコピーしてSQLManagementStudioに貼り付け、インタラクティブに実行すると、問題なく実行されます。
.NETコードを介して実行した場合に同じクエリに大幅に時間がかかる理由を誰かが知っていますか?(私はこれを再現することができます-コードから実行されたクエリは一貫してタイムアウトし、インタラクティブに実行されたクエリは一貫して正常に機能します。)
どんな助けでも大歓迎です。ありがとう!