T-SQL 为数据库中的所有表创建一个不加锁的视图

Posted

技术标签:

【中文标题】T-SQL 为数据库中的所有表创建一个不加锁的视图【英文标题】:T-SQL Create a view with no lock for all tables in a database 【发布时间】:2016-06-13 17:07:50 【问题描述】:

我正在寻找一个可以在我的服务器上运行的脚本,以便为我的数据库中的所有表创建没有锁定的视图。谢谢!

【问题讨论】:

你能解释一下原因吗? 设置Bad Habits to kick - putting NOLOCK everywhere - 不推荐在任何地方使用它 - 恰恰相反! 【参考方案1】:

虽然我同意这是一个坏主意,但通过展示一些示例仍然可能会有所收获/学习。但是——是的——这可能是一个非常糟糕的主意,但在某些情况下这可能是有道理的。

如果这是一次性的事情,您可以这样做,这将简单地为带有(nolock) 的视图创建 DDL。您只需要复制粘贴并执行。如果这需要动态生成,则需要利用更多。

关于以下内容的另一个警告——它在没有模式绑定的视图中使用select *。对这些类型的视图要格外小心,因为如果基础表结构发生变化,它们不会自动更新。除非您有其他保护措施,否则对视图中的列进行完全限定是明智且良好的做法。

select '
    create view ' + name + 'MayBeABadIdea as select * from ' + name + ' (nolock);
    go'
from sys.objects
where type = 'U'
order by name;

【讨论】:

谢谢。但是,我完全同意这不是最好的主意。我需要能够在不锁定表的情况下实时查询我的 CTI 数据库。不幸的是,医疗保健需要一些实时数据查找,但我也不想妨碍我的呼叫路由和传递。

以上是关于T-SQL 为数据库中的所有表创建一个不加锁的视图的主要内容,如果未能解决你的问题,请参考以下文章

SVN中如何为文件夹中的所有文件加锁

SQLServer之T-SQL增删改查

锁的理解

并发编程学习

使用T-SQL语句操作数据表-删除数据

InnoDB存储引擎下MVCC原理实现简述