これまでは、ストアドプロシージャを使用してレコードセットを返す古いASPページ(通常は< 2000行)からこのエラーが発生しました。ストアドプロシージャがASPページで断続的にタイムアウトします
ODBCドライバ用のMicrosoft OLE DBプロバイダー(0x80040E31) [Microsoft]の[ODBC SQL Serverドライバー]タイムアウトが
私は、サーバー上でSPを実行すると、それは問題なく動作しますが、ASPとそれだけでA与え期限切れタイムアウトが切れました。
SPを再コンパイルすると、問題が修正され、ASPはもう一度ASPで正常に動作します。しかし、それから数日後/週後、同じSP/ASPか別の問題のいずれかから同じ問題が発生します。ソーステーブルとASPはまったく変更されていません。
私は困惑しています。
サンプルSP:
USE [DB-Name]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[MY_StoredProcedure]
@Filter varchar(50) = null,
@SortOrder bit = 1,
@SortField varchar(50) = 'MyCol1',
@Page int = 1,
@RecordsPerPage int = 20
AS
BEGIN
SET NOCOUNT ON
CREATE TABLE #TempTable(RowID int IDENTITY,Col1 int,Col2 varchar(20),Col3 datetime)
INSERT INTO #TempTable
SELECT Col1, Col2, Col3 FROM [DB-Table]
WHERE
@Filter is null OR (
Col1 LIKE '%' + @Filter + '%'
OR Col2 LIKE '%' + @Filter + '%'
OR Col3 LIKE '%' + @Filter + '%'
)
ORDER By
CASE WHEN @SortField = 'MyCol1' AND @SortOrder = 1 THEN Col1 END ASC,
CASE WHEN @SortField = 'MyCol1' AND @SortOrder = 0 THEN Col1 END DESC,
CASE WHEN @SortField = 'MyCol2' AND @SortOrder = 0 THEN Col2 END DESC,
CASE WHEN @SortField = 'MYCol2' AND @SortOrder = 1 THEN Col2 END ASC,
CASE WHEN @SortField = 'MyCol3' AND @SortOrder = 1 THEN Col3 END ASC,
CASE WHEN @SortField = 'MyCol4' AND @SortOrder = 0 THEN Col3 END DESC
-- Find out the first and last record we want
DECLARE @FirstRec int, @LastRec int
SELECT @FirstRec = (@Page - 1) * @RecordsPerPage
SELECT @LastRec = (@Page * @RecordsPerPage + 1)
-- Now, return the set of paged records, plus, an indiciation of if we have more records or not!
SELECT *,TotalRecords=(SELECT COUNT(RowID) FROM #TempTable),MoreRecords=(SELECT COUNT(RowID) FROM #TempTable TI WHERE TI.RowID >= @LastRec)
FROM #TempTable
WHERE
RowID > @FirstRec AND RowID < @LastRec
DROP TABLE #TempTable
-- Turn NOCOUNT back OFF
SET NOCOUNT OFF
END
GO
この問題が発生しているのは1つのSPだけではありませんが、私が知っている限り、問題を抱えているのは私が今投稿したサンプルコードに似ています。リンクのおかげで...今日の私のための就寝時の読書のビット:) –
その動的フィルタはおそらく問題です。フィルタの最も一般的な形式で初めて呼び出す場合は、フィルタのより一般的な値に対してうまく機能しないクエリプランをキャッシュすることができます。この記事では、あなたが持っているオプションについて説明します(SQLサーバのバージョンに依存します)。 –
@Mitchは遊びを持ち、何が起こるかを見てくれます。私たちは2008年に指を踏み越え、問題を解決します。ムチャス・グラシアス。 –