【发布时间】:2009-12-03 21:43:00
【问题描述】:
例子:
USE AnotherDB
-- This works - same ID as from other DB
SELECT OBJECT_ID('AnotherDB.ASchema.ATable')
-- This works
SELECT OBJECT_NAME(OBJECT_ID('AnotherDB.ASchema.ATable'))
USE ThisDB
-- This works - same ID as from other DB
SELECT OBJECT_ID('AnotherDB.ASchema.ATable')
-- Gives NULL
SELECT OBJECT_NAME(OBJECT_ID('AnotherDB.ASchema.ATable'))
显然元数据函数需要一个当前数据库。对于 OBJECT_NAME 等函数,BOL 条目通常具有类似这样的语言:
Microsoft SQL Server 2005 数据库 引擎假设 object_id 在 当前数据库的上下文。一种 引用 object_id 的查询 另一个数据库返回 NULL 或 结果不正确。
我需要能够做到这一点的原因:
我无法在 SP 中使用其他数据库
我无法在其他数据库或 master(或除我自己之外的任何其他数据库)中创建代理 UDF 存根(或更改任何内容)来帮助我。
那么当我在 ThisDB 中时,如何从 OBJECT_ID('AnotherDB.ASchema.ATable') 获取数据库?
我的目标是从配置表中获取可能部分限定的名称,在当前上下文中将其解析为完全限定的名称,使用 PARSENAME 获取数据库名称,然后使用动态 SQL 构建脚本以获取直接使用database.sys.* 或USE db; sys.* 到元数据表
【问题讨论】:
-
您是否拥有某个对象的实际 id,例如 234521345,并且您想从另一个 db 中检索该 id 的名称。但是您拥有所有 db 的名称?
-
我并不真的需要身份证,但如果我在路上用一个就可以了。
标签: sql-server sql-server-2005 metadata