加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 另一个数据库中的对象的OBJECT_ID – 如何查找数

发布时间:2020-12-12 16:34:57 所属栏目:MsSql教程 来源:网络整理
导读:例: USE AnotherDB-- This works - same ID as from other DBSELECT OBJECT_ID('AnotherDB.ASchema.ATable')-- This worksSELECT OBJECT_NAME(OBJECT_ID('AnotherDB.ASchema.ATable'))USE ThisDB-- This works - same ID as from other DBSELECT OBJECT_ID('
例:
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'))

显然,元数据功能期望当前的数据库. BOL条目通常具有类似于OBJECT_NAME等功能的语言.

The Microsoft SQL Server 2005 Database
Engine assumes that object_id is in
the context of the current database. A
query that references an object_id in
another database returns NULL or
incorrect results.

我需要这样做的原因:

>我无法从SP中使用其他数据库
>我不能在其他数据库或主(或除我自己以外的任何其他数据库)中创建代理UDF存根(或更改任何内容)以帮助我.

那么当我在InDB中时如何从OBJECT_ID(‘AnotherDB.ASchema.ATable’)获取数据库?

我的目标是从配置表中获取可能部分限定的名称,将其在当前上下文中解析为完全限定名称,使用PARSENAME获取数据库名称,然后使用动态SQL构建脚本以便能够访问元数据表直接与database.sys.*或USE db; SYS.*

解决方法

我正确理解您是否希望使用AnotherDB的db id?
SELECT *
FROM    master..sysdatabases
WHERE   name = 'AnotherDB'

否则,如果有帮助,您可以在动态SQL中使用其他数据库:

DECLARE @SQL    NVARCHAR(MAX),@objId  INT

SET @SQL = N'
    USE AnotherDB

    SELECT  @id = OBJECT_ID(''customer'')
'

EXEC SP_EXECUTESQL @SQL,N'@id INT OUTPUT',@id = @objId OUTPUT

SELECT  @objId

或者在其他dbs中执行SP:

EXEC AnotherDB.dbo.ProcedureName 
      @paramX = ...,@paramY = ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读