是否可以在 SQL Server 中使用 nolock 更改视图?
Posted
技术标签:
【中文标题】是否可以在 SQL Server 中使用 nolock 更改视图?【英文标题】:Is it possible to alter view with nolock in SQL Server? 【发布时间】:2017-08-26 02:30:12 【问题描述】:是否允许使用 nolock 更改视图?如果是这样,我应该如何使用它?
ALTER VIEW dbo.xx_view
AS
SELECT *
FROM dbo.yy
我目前的问题是我必须等待其他人完成使用dbo.xx_view
,然后才能更改视图。有没有一种方法可以强制更改视图,即使其他人正在对其进行查询。
【问题讨论】:
NOLOCK 与“锁定”视图定义无关。 “查询提示”恰好是 SQL 世界中更为普遍和持久的坏习惯之一。这里有几篇文章可以帮助您快速了解... blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere ... sqlstudies.com/2015/03/18/why-not-nolock 说 HINTS 实际上是从选项中禁用优化器也很有帮助。 Microsoft 在其文档页面中煞费苦心地强调,专业 DBA 将它们用作最后的手段。 HINTS - Microsoft Docs 另外,请理解,除非这是一个物化视图,否则 VIEWS 是硬编码的查询。在用户完成之前,您将无法修改它们,因为这将需要使查询在执行时使用的 sql 计划无效。 【参考方案1】:您可以像任何其他选择语句一样指定它:
ALTER VIEW dbo.xx_view AS
SELECT * FROM dbo.yy WITH (NOLOCK)
或者,您可以按照here 的建议在视图上查询时提供 NOLOCK 提示:
SELECT * FROM dbo.xx_view WITH (NOLOCK)
在后一种情况下,您在视图中的查询不需要提供 NOLOCK 提示。
【讨论】:
您好 Nisarg,感谢您的回复!我正在考虑是否可以更改视图 dbo.xx_view,即使其他人正在使用 dbo.xx_view。我目前遇到的问题是我必须等到他们完成使用 dbo.xx_view,然后才能更改视图。我或多或少在想ALTER VIEW dbo.xx_view WITH (NOLOCK) AS SELECT * FROM dbo.yy
这不起作用...
我从来没有遇到过这样的问题。如果您尝试更改它,您会收到任何错误吗?
不,没有错误。该进程只是暂停以等待另一个进程完成。以上是关于是否可以在 SQL Server 中使用 nolock 更改视图?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 SQL Server 中使用通配符作为 OPENJSON 的参数?
是否可以在具有 WebAPI 服务的 3 层体系结构的 SQL Server 数据库中使用 Windows 身份验证?
是否可以在 SQL Server 中创建一个可以处理序列的函数?