相关疑难解决方法(0)

是否可以在不使用动态 sql 的情况下在另一个数据库中获取架构 ID?

我从对象 ID 和数据库 ID 开始。在用户定义的函数中,我想获取数据库、架构和对象的全名和 ID。如何在不使用 UDFS 内部禁止的动态 SQL 的情况下获取架构ID

笔记:

  • 我可以获得数据库名称 DB_NAME
  • 我可以通过使用来获取对象名称,OBJECT_NAME因为它接受数据库 ID 作为第二个参数
  • 我可以通过使用来获取模式名称OBJECT_SCHEMA_NAME因为它也接受数据库 ID 作为第二个参数
  • 使用动态 SQL 可以轻松获取架构 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)

schema sql-server

5
推荐指数
2
解决办法
3617
查看次数

标签 统计

schema ×1

sql-server ×1