Microsoft SQL Server 2016上的AM,我有以下(简化的)查询,以引用一个视图:

问题描述 投票:0回答:1
CREATE VIEW dbo.myView AS SELECT Column1 FROM dbo.SomeOtherTable WITH (NOLOCK)

我现在的问题是:

外部选择是否使用nolock桌暗示,这意味着视图内的nolock是无关紧要的吗?或执行外部选择时,诺洛克仍然很重要?
我问题的更大背景是,我有一个正在分析服务器上的阻塞情况的情况。我找到了一个查询,例如上述选择:选择查询正在使用视图。该视图使用了Nolock表提示,但外部选择没有。尽管如此,查询还是一个障碍物,我正在尝试确定这一点的原因。
我已经进行了一些研究,我能找到的唯一确认是对于人们想知道是否将

NOLOCK

传播到内表的问题。
	

这很容易测试。首先,在沙盒环境中,运行以下内容: CREATE TABLE dbo.MyTable (ID int); GO CREATE VIEW dbo.MyView AS SELECT ID FROM dbo.MyTable WITH (NOLOCK); GO CREATE VIEW dbo.MyView2 AS SELECT ID FROM dbo.MyTable; GO BEGIN TRANSACTION Test; INSERT INTO dbo.MyTable VALUES(1); notice i不COMMIT

交易。现在在新窗口中,运行

SELECT * FROM dbo.MyView;

。请注意,它返回结果。如果您也尝试

SELECT * FROM dbo.MyView2 WITH (NOLOCK);

,您还将获得结果。但是,尝试
SELECT * FROM dbo.MyView2;

,但是查询将“悬挂”。 然后,您可以通过返回原始查询窗口并运行以下内容来“清理”:
sql-server t-sql view nolock
1个回答
9
投票

COMMIT; GO DROP VIEW dbo.MyView2; DROP VIEW dbo.MyView; DROP TABLE dbo.MyTable;

当然,真正的问题是,您是

,但这不是这个问题的问题。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.