dbname..sp_XXXXX也可
函数不行!
如:
use master
go
CREATE FUNCTION [fn_aa] (@a int)  
RETURNS int AS  
BEGIN 
return 1
END
go
select dbo.fn_aa(1)
go
use pubs
go
select master.dbo.fn_aa(1)

解决方案 »

  1.   

    1。 我在SP中不能用use dbname 切换数据库
    2。 
    如果sp__obj是放在master中的sp
    exec 论坛数据库..sp__obj 'tr'
    exec 商情信息库..sp__obj 'tr'
    result in:
    parent    name               type     id
    --------  -----------       ------   ----------
    a a_Trigger1  触发器 370100359
    b b_Trd           触发器 626101271
    b b_Tri           触发器 610101214
    b b_Trigger1  触发器 594101157
    b b_Tru           触发器 642101328
    d d_Trigger1  触发器 1026102696
    版面 trigger_版面  触发器 1973582069
    版面表 ins_upd_del_版面表 触发器 1845581613parent    name               type     id
    --------  -----------       ------   ----------
    版面表 upd_del_版面表 触发器 958626458这样我在一个库(如:商情信息库)中就获得了其他库的信息,如果sp放在其它库(如系统管理库)中 'exec 论坛数据库..sp__obj' 不能解析,而: 系统管理库..sp__obj 获得的是当前库(商情信息库)的信息。3。请教还有更简便的方法吗?
      

  2.   

    1、我写的代码是让你验证函数是不行的!
    2、不要放在master中,这是sqlserver非常忌讳的!你放在其他库也可以用"过程所在库名..sp__obj"
    3、我没看懂你的意思你想达到什么效果呢?
    一般用 库名.dbo.对象名 或 库名..对象名 可以跨数据库访问
      

  3.   

    我要做一组通用的管理sp,他要管理所有数据库,不能放在用户数据库中,放在系统管理库中。这样,系统管理库和用户数据库的维护(备份、恢复等)是独立的。
    当调用用户数据库(如:dbShipping)的sp(如sp_GetQry),而该sp不存在时,他会到master中去解析,但dbShipping..sp_GetQry中使用的表是dbShipping中的表,而不是master中的表。
    如果sp_GetQry放在其他数据库中,如系统管理库,那么,dbShipping..sp_GetQry不可解析,而系统管理库..sp_GetQry中使用的表是[系统管理库]中的表。
    1 如果我在sp中可以用use dbname可以绕开。
    2 在sp中加上库名参数,用动态sql添加 库名..对象名 太麻烦,。
      

  4.   

    你可以建立一元数据数据库!
    如:
    create table 库表(库编号,库名)
    create table 表库(表编号,库名编号,表名)
    create table 列表(列编号,表编号,列名,类型)
    create table 过程表(过程编号,库编号,过程名)
    .....查询:
    select a.库名,b.表名,c.列名,类型 from 库表 a 
    join 表库 b on a.库编号=b.库编号
    join 列表 c on b.表编号=c.表编号
      

  5.   

    pengdali(大力) thanks!
    我的确要在系统管理库中建立如您代码所示的数据字典,但为了减少动态sql的复杂度,我想消除库名的解析部分。
    因为,查询的结构可能非常复杂。
    顺便说一下,我的情况是:数据量不算很大(效率要求不高),但数据结构具有不确定性和多变性,因为用户全部是神经病,他们的思想从来不会保持一周不变,天天“与时俱进”。