元数据访问、隔离级别和锁提示

SQL Server 不保证通过目录视图、兼容性视图、信息架构视图、元数据发出内置函数访问元数据的查询遵守锁提示。

SQL Server 数据库引擎在内部仅按照 READ COMMITTED 隔离级别进行元数据访问。 如果事务有一个隔离级别(例如 SERIALIZABLE),并且您尝试在事务中使用目录视图或元数据发出内置函数访问元数据,则查询将一直运行,直到它们按照 READ COMMITTED 隔离级别完成。 但是,在快照隔离级别下,访问元数据可能会因并发的 DDL 操作而失败。 这是因为未将元数据版本化。 因此,在快照隔离级别下访问下列内容可能会失败:

  • 目录视图

  • 兼容性视图

  • 信息架构视图

  • 元数据发出内置函数

  • 存储过程的 sp_help

  • SQL Server Native Client 目录过程

  • 动态管理视图和函数

有关隔离级别的详细信息,请参阅 SET TRANSACTION ISOLATION LEVEL (Transact-SQL)

下表概述了各种隔离级别下的元数据访问。

隔离级别

支持

遵守

READ UNCOMMITTED

不保证

READ COMMITTED

REPEATABLE READ

SNAPSHOT ISOLATION

SERIALIZABLE