想得到所有包含tAscPrmUser表的数据库:
sp_MSforeachdb
'if object_id("tAscPrmUser","u") is not null
print "?"'
可总是调用当前数据库的object_id函数。 怎么调用指定数据库的object_id。
难道必须用select 1 from ?.sys.tables或 select 1 from ?.sysobjects还有一个问题:
还有怎么将得到的数据库名称放到一个变量或者一个表中?
declare @dbname nvarchar(100)
exec sp_MSforeachdb 'if object_id("tAscPrmUser","u") is not null  set @dbname = @dbname + "?"'
print @dbname
但是sp_MSforeachdb 的参数一并不能访问外部变量

解决方案 »

  1.   

    use ?
    go
    if object_id....
      

  2.   

    sp_MSforeachdb
    'use ?
    if object_id("tAscPrmUser","u") is not null
    print "?"'
      

  3.   

    平时怎么写.在sp_msforeachdb里就怎么写.
      

  4.   

    谢谢 liangCK 试了好用
    那第二个问题呢?
      

  5.   


    动态语句
    用sp_executesql输出参数
      

  6.   

    sp_MSforeachdb 'use ? if object_id("T_1","u") is not null print "?"'
      

  7.   

    输出参数 
    declare @num int, @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) --如何将exec执行结果放入变量中? declare @num int, @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  8.   

    EXEC sp_MSforeachdb   @command1="if isnull(object_id('tabelname','u') ,0)=0 print '?'"
      

  9.   

    use test 
    go
    CREATE TABLE t(a VARCHAR(200))
    go
    exec sp_msforeachdb 'use ? if object_id(''表'') is not null insert test.dbo.t select ''?'''
    go
    SELECT * FROM t
      

  10.   

    create table tempdb.dbo.#(dbname varchar(200))
    go
    sp_MSforeachdb 'use ? if object_id("tAscPrmUser","u") is not null 
    insert into tempdb.dbo.# select "?"
    '
    declare @dbname nvarchar(2000) 
    select @dbname=isnull(@dbname+',','')+dbname from tempdb.dbo.#
    select @dbname
    drop table tempdb.dbo.#
      

  11.   


    if object_id('tempdb.dbo.#','U') is not null drop table #
    go 
    create table tempdb.dbo.#(dbname varchar(200))
    go
    sp_MSforeachdb 'use ? if object_id("tAscPrmUser","u") is not null 
    insert into tempdb.dbo.# select "?"
    '
    declare @dbname nvarchar(2000) 
    select @dbname=isnull(@dbname+',','')+dbname from tempdb.dbo.#
    select @dbname
      

  12.   

    谢谢 perfectaction
    就按你的方法,在tempdb里面建表,可惜没分了