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 都是正确的名称,并没书写错误!
请教如何解决?
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 都是正确的名称,并没书写错误!
请教如何解决?
改为:set @sqlstr='select object_id from '+@dbname+'.sysobjects where name='+@tblname ?
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 行受影响)
*/
运行结果完全和在db1库中运行:select * from sys.objects 一样
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
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)