相关疑难解决方法(0)

在内部,OpenRowset(TABLE ...) 是如何工作的?

我看到很多内部视图,例如sys.syscomments调用CROSS APPLY OpenRowset(TABLE, oid). 我想知道这个函数是如何运作的以及它从什么地方读取的。让我们看一个例子TABLE SQLSRC

  • sys.syscomments
    • OpenRowset(TABLE SQLSRC, o.id, 0)(osys.sysschobjs$)
    • OpenRowset(TABLE SQLSRC, c.object_id, c.column_id)(csys.computed_columns)
    • OpenRowset(TABLE SQLSRC, p.object_id, p.procedure_number)(psys.numbered_procedures)
  • sys.all_extended_procedures
    • OpenRowset(TABLE SQLSRC, o.object_id, 0)(osys.all_objects)
  • sys.sys全文目录
    • OpenRowset(TABLE SQLSRC, o.id, 0)(osys.sysschobjs$)

看起来它正在存储程序的源代码,但在内部它们读取的是TABLE SQLSRC什么,又是什么?我猜这是一个外线键值存储?

我知道我可以使用object_definition(这是sys.sql_modules内部调用),但我想了解数据库的工作方式以及存储位置。

而且,不仅SQLSRCTABLE对以下内容的引用,

ACTIVE_TRANSACTIONS
ALUCOUNT
APRC_EVENT
BLOB_CONTAINER_ACCESSOR
BUILTINPERMISSIONS
CFGPROP …
Run Code Online (Sandbox Code Playgroud)

sql-server database-internals

9
推荐指数
1
解决办法
2072
查看次数

标签 统计

database-internals ×1

sql-server ×1