このクエリでランダム/断続的な SQL タイムアウトが発生しましたが、単純なクエリから多くの処理が生成されているようです。これは正しい動作ですか?
次のような単純なストアド プロシージャがあります。
CREATE PROCEDURE [dbo].[FindClosestXNearCoordinates]
@latitude decimal,
@longitude decimal
AS
BEGIN
SET NOCOUNT ON;
declare @emptyGUID uniqueidentifier
set @emptyGUID = cast(cast(0 as binary) as uniqueidentifier)
declare @radiusInMeters float
set @radiusInMeters = 3500 * 1609.344
declare @coordinatePoint as Geography
SET @coordinatePoint = geography::STGeomFromText('POINT(' + CAST(@longitude AS VARCHAR(20)) + ' ' + CAST(@latitude AS VARCHAR(20)) + ')', 4326)
declare @coordinateRadius as Geography
set @coordinateRadius = @coordinatePoint.STBuffer(@radiusInMeters);
select top 1 [b].[BaseId], [b].[Code], [b].[Name], [b].[Location], [b].[TerritoryId], [b].[Latitude], [b].[Longitude]
from XTable b
where ( b.GeoLocation.STIntersects(@coordinateRadius) = 1 )
order by b.GeoLocation.STDistance(@coordinatePoint) asc
END
SQL プロファイラーでキャプチャすると、クエリと 188 を超えるステートメントが連続して表示されます。これを SSMS で実行すると 1 つの実行しか表示されないため、非常に混乱しますが、アプリケーションで実行すると 188 のサブステートメントが生成されます。