1

私たちの会社では、ビューとストアド プロシージャを使用する傾向があります。

私たちは最近、このNOLOCKステートメントを多くのビューに実装し始めました。

私が疑問に思っていNOLOCKたのは、ビューに適用している場合、ストアドプロシージャに「滴り落ちる」ことです

と呼ばれるビューがviewPartyPackageあり、ビューステートメントが...

SELECT   
    PartyPackageID, Name, Created, LastModified, Deleted 
FROM        
    dbo.PartyPackage WITH (NOLOCK) 
WHERE     
    (Deleted = 0)

また、ストアドプロシージャもありました:

ALTER proc [dbo].[partypackage_Select]
    (@PartyPackageID bigint = null) 
AS 
    SELECT * 
    FROM [viewPartyPackage] PartyPackage 
    WHERE (@PartyPackageID IS NULL OR @PartyPackageID = [PartyPackageID])

ストアド プロシージャから呼び出しているため、NOLOCK 機能が失われ、ストアド プロシージャにも (NOLOCK) を設定する必要がありますか? それとも、ビューにある NOLOCK が機能しますか?

4

2 に答える 2

2

このSOの質問に対する回答を参照してください。引用するには:

MSDNのテーブルヒントを参照してください 。「SQLServer2005では、すべてのロックヒントは、ビューで参照されるすべてのテーブルとビューに伝達されます。また、SQLServerは対応するロック整合性チェックを実行します。」

于 2010-07-30T14:06:11.967 に答える
1

ビューの NOLOCK は、ビューがどこから呼び出されても有効になります。

于 2010-07-30T14:05:26.237 に答える