【发布时间】:2010-07-30 14:02:23
【问题描述】:
在我们公司,我们倾向于使用视图和存储过程。
我们最近开始对我们的很多观点实施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 起作用了?
【问题讨论】:
-
如果您想始终使用它,请在开始时使用
SET TRANSACTION READ UNCOMMITTED。贵公司知道使用NOLOCK的风险吗?即你可能会得到不正确的数字
标签: sql sql-server tsql nolock