我要检测master库中是否存在以下的存储过程。
xpcmdshell sp_oacreate xp_dirtree 等等。。 我把 xp_dirtree删掉了。
要求输出格式是:
xpcmdshell : 1
sp_oacreate : 1
xp_dirtree : 0....
1 的话表示存在, 0表示 不存在。
但是我用下面的代码:
select name+' : '+ltrim(count(*)) from master..sysobjects where [name] in ('xp_cmdshell','sp_oacreate','xp_dirtree') group by name就只能看到
xpcmdshell : 1
sp_oacreate : 1xp_dirtree看不到啊。。
应该怎么写?

解决方案 »

  1.   


    select a.name+' : '+ltrim(count(*)) from
    (select name='xp_cmdshell'
    union all
    select name='sp_oacreate'
    union all
    select name='xp_dirtree')a
    left join master..sysobjects b on a.name=b.name
    group by a.name
      

  2.   

    select name+' : '+ltrim(count(*)) from master..sysobjects where [name] in ('xp_cmdshell','sp_oacreate','xp_dirtree') group by name 
    ----------------
    因为你的master..sysobjects表中不存在name为xp_dirtree的数据。所以就查不出来了。
      

  3.   

    呃,, 只能用UNION么。。要检测的存储过程多。 写起来太长了。。
      

  4.   

    恩。也可以考虑把要检测的名字都存在一个表中。如:
    create table pname(name varchar(50))
    insert into pname select 'xp_cmdshell'
    insert into pname select 'sp_oacreate'
    insert into pname select 'xp_dirtree'
    go
    --查询时:select a.name+' : '+ltrim(count(*)) from pname a
    left join master..sysobjects b on a.name=b.name
    group by a.name