我看到很多内部视图,例如sys.syscomments
调用CROSS APPLY OpenRowset(TABLE, oid)
. 我想知道这个函数是如何运作的以及它从什么地方读取的。让我们看一个例子TABLE SQLSRC
,
OpenRowset(TABLE SQLSRC, o.id, 0)
(o
是sys.sysschobjs$
)OpenRowset(TABLE SQLSRC, c.object_id, c.column_id)
(c
是sys.computed_columns
)OpenRowset(TABLE SQLSRC, p.object_id, p.procedure_number)
(p
是sys.numbered_procedures
)OpenRowset(TABLE SQLSRC, o.object_id, 0)
(o
是sys.all_objects
)OpenRowset(TABLE SQLSRC, o.id, 0)
(o
是sys.sysschobjs$
)看起来它正在存储程序的源代码,但在内部它们读取的是TABLE SQLSRC
什么,又是什么?我猜这是一个外线键值存储?
我知道我可以使用object_definition
(这是sys.sql_modules
内部调用),但我想了解数据库的工作方式以及存储位置。
而且,不仅SQLSRC
有TABLE
对以下内容的引用,
ACTIVE_TRANSACTIONS
ALUCOUNT
APRC_EVENT
BLOB_CONTAINER_ACCESSOR
BUILTINPERMISSIONS
CFGPROP …
Run Code Online (Sandbox Code Playgroud)