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)
函数不行!
如:
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)
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、不要放在master中,这是sqlserver非常忌讳的!你放在其他库也可以用"过程所在库名..sp__obj"
3、我没看懂你的意思你想达到什么效果呢?
一般用 库名.dbo.对象名 或 库名..对象名 可以跨数据库访问
当调用用户数据库(如: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添加 库名..对象名 太麻烦,。
如:
create table 库表(库编号,库名)
create table 表库(表编号,库名编号,表名)
create table 列表(列编号,表编号,列名,类型)
create table 过程表(过程编号,库编号,过程名)
.....查询:
select a.库名,b.表名,c.列名,类型 from 库表 a
join 表库 b on a.库编号=b.库编号
join 列表 c on b.表编号=c.表编号
我的确要在系统管理库中建立如您代码所示的数据字典,但为了减少动态sql的复杂度,我想消除库名的解析部分。
因为,查询的结构可能非常复杂。
顺便说一下,我的情况是:数据量不算很大(效率要求不高),但数据结构具有不确定性和多变性,因为用户全部是神经病,他们的思想从来不会保持一周不变,天天“与时俱进”。