我的前辈告诉我,默认情况下执行 SQL 查询不会锁定表。
但是我的 SSRS 报告出现了一些问题,似乎在锁定和出错方面遇到了一些问题。
我做了一些谷歌搜索,但没有找到任何东西。
只是寻找确认 SSRS 报告实际上会锁定任何正在查询的表吗?
是否有任何 MSDN 文档专门记录了这种行为?
我的前辈告诉我,默认情况下执行 SQL 查询不会锁定表。
但是我的 SSRS 报告出现了一些问题,似乎在锁定和出错方面遇到了一些问题。
我做了一些谷歌搜索,但没有找到任何东西。
只是寻找确认 SSRS 报告实际上会锁定任何正在查询的表吗?
是否有任何 MSDN 文档专门记录了这种行为?
SSRS 不会自行锁定任何内容。锁定将由嵌入在报告中的查询驱动。没有人可以回答这个问题,但您可以查看报告和使用的查询,然后查看它们是否锁定表。
通常查询会锁定表中的数据,而不是表。一致、正确的报告绝对需要锁定。不要屈服于添加 NOLOCK 提示的谬论并收工,你会得到不正确的结果。
如果您看到由报告引起的生产争用,那么有很多解决方案。使用可用性组、数据库快照或备用日志传送服务器将报告卸载到只读服务器。另一种方法是启用行版本化隔离级别,如 SNAPSHOT。
对于来自 SSRS 的直接选择语句,肯定会锁定表。
您可以使用 NOLOCK 并编写一个特定查询,其中包含要在报告中显示的所需列。
在这里,您的选择查询不能有“*”,那里有列名。