TSQL NOLOCK VIEW和存储过程
问题描述:
在我们公司,我们倾向于使用视图和存储过程。TSQL NOLOCK VIEW和存储过程
我们最近开始实施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起作用了吗?
答
查看the answers这个问题。引述:
见Table Hints在MSDN:“在SQL Server 2005中,所有的锁提示将传播到所有在一个视图中引用的所有表和视图此外,SQL Server执行相应的锁一致性检查。”
如果您想在整个过程中使用它,请在开始时使用'SET TRANSACTION READ UNCOMMITTED'。贵公司是否知道使用'NOLOCK'的风险?即你可能得到不正确的数字 – 2016-12-24 10:17:57