TSQL NOLOCK VIEW和存储过程

时间:2010-07-30 14:02:23

标签: sql sql-server tsql nolock

在我们公司,我们倾向于使用观点和存储过程。

我们最近开始在很多观点中实施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是否会发挥作用?

2 个答案:

答案 0 :(得分:2)

请参阅此问题的the answers。引用:

  

请参阅MSDN中的Table Hints:“在SQL Server 2005中,所有锁定提示都会传播到视图中引用的所有表和视图。此外,SQL Server还会执行相应的锁定一致性检查。” p>

答案 1 :(得分:1)

无论从何处调用视图,视图中的NOLOCK都将生效。