В нашей компании мы склонны использовать представления и хранимые процедуры.
Недавно мы начали применять оператор 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, который в поле зрения?