我从对象 ID 和数据库 ID 开始。在用户定义的函数中,我想获取数据库、架构和对象的全名和 ID。如何在不使用 UDFS 内部禁止的动态 SQL 的情况下获取架构ID?
笔记:
DB_NAME
OBJECT_NAME
因为它接受数据库 ID 作为第二个参数OBJECT_SCHEMA_NAME
因为它也接受数据库 ID 作为第二个参数[db_name_i_want].sys.schemas
,但这在 UDF 中是不允许的更新(目的)
为了从更远的调用堆栈中解决DB_ID 上下文的可能解决方案,我正在调整Gabriel McAdams 的一些调用堆栈函数以跨多个数据库工作。他的版本只是将每个调用级别的 proc ID 推送到CONTEXT_INFO
流中。我已经修改了它以推送数据库 ID。我也可以推送模式 ID,但随后事情开始变得拥挤,因为它CONTEXT_INFO
被限制为 128 字节。因此,我希望能够从创建调用堆栈视图 (CallStackView) 的函数中的 db id 和对象 id 重建架构 ID。
代码
-- @db_id, @proc_id are saved in a logging function
DECLARE @db_name …
Run Code Online (Sandbox Code Playgroud)