リンクサーバー上のSQL Serverテーブルを結合するビューがあります。リンクされたサーバーには、ビューにインデックスを作成することができないという意味の制限があり、選択を行っているにもかかわらず、昨夜データベースをロックしたストアドプロシージャがあります。ストアドプロシージャは、(私はSELECT文の両方から十列を省略さき).NetTiersによって生成される:データベース間の照会をクエリするストアドプロシージャのロックを緩和する方法
CREATE PROCEDURE [AbnormalReadingSource_Get]
(
@WhereClause varchar (2000) ,
@OrderBy varchar (2000) ,
@PageIndex int ,
@PageSize int
)
AS
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
-- Set the page bounds
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageLowerBound + @PageSize
IF (@OrderBy is null or LEN(@OrderBy) < 1)
BEGIN
-- default order by to first column
SET @OrderBy = '[Result]'
END
-- SQL Server 2005 Paging
declare @SQL as nvarchar(4000)
SET @SQL = 'WITH PageIndex AS ('
SET @SQL = @SQL + ' SELECT'
IF @PageSize > 0
BEGIN
SET @SQL = @SQL + ' TOP ' + convert(nvarchar, @PageUpperBound)
END
SET @SQL = @SQL + ' ROW_NUMBER() OVER (ORDER BY ' + @OrderBy + ') as RowIndex'
SET @SQL = @SQL + ', [Result]'
SET @SQL = @SQL + ' FROM [AbnormalReadingSource]'
IF LEN(@WhereClause) > 0
BEGIN
SET @SQL = @SQL + ' WHERE ' + @WhereClause
END
SET @SQL = @SQL + ') SELECT'
SET @SQL = @SQL + ' [Result],'
SET @SQL = @SQL + ' FROM PageIndex'
SET @SQL = @SQL + ' WHERE RowIndex > ' + convert(nvarchar, @PageLowerBound)
IF @PageSize > 0
BEGIN
SET @SQL = @SQL + ' AND RowIndex <= ' + convert(nvarchar, @PageUpperBound)
END
exec sp_executesql @SQL
-- get row count
SET @SQL = 'SELECT COUNT(*) as TotalRowCount'
SET @SQL = @SQL + ' FROM [AbnormalReadingSource]'
IF LEN(@WhereClause) > 0
BEGIN
SET @SQL = @SQL + ' WHERE ' + @WhereClause
END
exec sp_executesql @SQL
END
データベーストランザクション分離レベルがREAD COMMITTED
ように、ストアドプロシージャに分離レベルを設定することは必要ではなくなっていますストアドプロシージャを生成するために使用された.NetTiersテンプレートで。ロックが発生しないように、readpastヒントを使用できますか? readpastを使用するときに、他のヒントを提供する必要はありますか?
おかげ - このケースでは、私が一緒に行くつもりですreadpastでも、私はあなたの提案を使用することができたことを感謝します。 –