SQL Server 2005环境下,执行以下语句段:
declare @dbname varchar(10)
declare @tblname varchar(60)
declare @tblid int
declare @sqlstr varchar(2000)set @dbname='db1'
set @tblname='tb1'
set @sqlstr='select object_id from '+@dbname+'.sys.objects where name='+@tblnameexecute @tblid=@sqlstr
select @tblid报错如下:消息 911,级别 16,状态 1,第 9 行
在 sysdatabases 中找不到数据库 'select object_id from db1' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了该名称。备注:db1 和 tb1 都是正确的名称,并没书写错误!
请教如何解决?

解决方案 »

  1.   

    set @sqlstr='select object_id from '+@dbname+'.sys.objects where name='+@tblname 
    改为:set @sqlstr='select object_id from '+@dbname+'.sysobjects where name='+@tblname ?
      

  2.   

    set @sqlstr='select object_id from '+@dbname+'.sys.objects where name='''+@tblname + ''''
      

  3.   

      我的感觉db1.sys.objects这样写是错误的吧,sys.本来就是所有的
      

  4.   

    declare @dbname varchar(20) 
    declare @tblname varchar(60) 
    declare @sqlstr varchar(2000) set @dbname='adventureworks' 
    set @tblname='store' 
    set @sqlstr='select object_id from '+@dbname+'.sys.objects where name='''+@tblname + ''''
    exec(@sqlstr)/*
    object_id
    -----------
    2130106629
    (1 行受影响)
    */
      

  5.   

    3楼的兄弟,在sqlserver2005 中 在非db1库上下文中书写: select * from db1.sys.objects 是完全可行的.
    运行结果完全和在db1库中运行:select * from sys.objects 一样
      

  6.   

    declare @dbname varchar(10)
    declare @tblname varchar(60)
    declare @tblid int
    declare @sqlstr nvarchar(2000)set @dbname='db1'
    set @tblname='tb1'
    set @sqlstr='select @tblid=object_id from '+@dbname+'.sys.objects where name='''+@tblname+''''
    exec sp_executesql @sqlstr,N'@tblid int output',@tblid output
    select @tblid
      

  7.   

    declare @dbname nvarchar(20) 
    declare @tblname nvarchar(60) 
    declare @tblid int 
    declare @sqlstr nvarchar(2000) set @dbname='AdventureWorks' 
    set @tblname='Sales.Store' 
    set @sqlstr=N'select @tblid=object_id('''+@dbname+'.'+@tblname+''')'
    execute sp_executesql @sqlstr,N'@tblid int output',@tblid=@tblid output 
    select @tblid 
    -----------
    2130106629(1 row(s) affected)