sql-server – 另一个数据库中的对象的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等功能的语言.
我需要这样做的原因: >我无法从SP中使用其他数据库 那么当我在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 = ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |