TSQL NOLOCK VIEW и хранимая процедура - PullRequest
1 голос
/ 30 июля 2010

В нашей компании мы склонны использовать представления и хранимые процедуры.

Недавно мы начали применять оператор 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 ]

2 голосов
/ 30 июля 2010

См. ответы на этот ТАК вопрос.Цитата:

См. Подсказки к таблицам в MSDN: «В SQL Server 2005 все подсказки блокировки распространяются на все таблицы и представления, на которые ссылается представление.SQL Server выполняет соответствующие проверки согласованности блокировок. "

1 голос
/ 30 июля 2010

NOLOCK в представлении вступит в силу независимо от того, откуда оно вызывается.

...