我看到很多内部视图,例如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)