如何从对象ID和数据库ID确定SQL Server对象名?

Tom*_*mek 2 sql-server metadata sql-server-2000 object

我需要SQL Server 2005的行为,其中函数OBJECT_NAME接受两个参数,obj id并且db id,虽然SQL Server 2000只接受obj id此操作,但执行必须位于被检查对象所属的数据库的上下文中.

必须可以在函数中实现解决方案,因此可以在选择查询中使用它.

Phi*_*ley 5

在SQL 2005及更高版本中,执行此操作当然是微不足道的.问题是SQL 2000.我曾经使用过2000次,但是不再能够访问它的任何安装; 其余部分主要来自记忆,可能不准确.

关键是如何在编写代码时无法知道其他数据库(或多个数据库)的内容,从"当前"数据库以外的数据库中检索数据.(是的,db_id参数非常方便!)对于这个问题和类似的问题,一般的解决方法是创建动态代码,如:

SET @Command = 'select name from ' + @dbname + '.dbo.sysobjects where object_id = ' + @ObjectId
EXECUTE (@Command)
Run Code Online (Sandbox Code Playgroud)

问题是,我很确定你不能在函数内运行动态代码(或者只是在SQL 2000函数中).

您可能不得不求助于创建临时表,通过动态查询填充它,然后在您尝试编写的"主"查询中使用它.Psuedo代码如下:

CREATE #TempTable
IF SQL2000 or earlier
    INSERT #TempTable EXECUTE (select data from TargetDb.dbo.sysobjects)
    --  Note that the entire insert may need to be in the dynamic statement
ELSE
    INSERT #TempTable SELECT [from query based on object_id]

SELECT [the data you need]
 from YourTable
  join #TempTable
Run Code Online (Sandbox Code Playgroud)