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;
,但是查询将“悬挂”。
然后,您可以通过返回原始查询窗口并运行以下内容来“清理”:COMMIT;
GO
DROP VIEW dbo.MyView2;
DROP VIEW dbo.MyView;
DROP TABLE dbo.MyTable;
当然,真正的问题是,您是
,但这不是这个问题的问题。