在我们公司,我们倾向于使用观点和存储过程。
我们最近开始在很多观点中实施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是否会发挥作用?
答案 0 :(得分:2)
请参阅此问题的the answers。引用:
请参阅MSDN中的Table Hints:“在SQL Server 2005中,所有锁定提示都会传播到视图中引用的所有表和视图。此外,SQL Server还会执行相应的锁定一致性检查。” p>
答案 1 :(得分:1)
无论从何处调用视图,视图中的NOLOCK都将生效。