1,同一台服务器实例,有多个数据库如(dba,dbb,dbc,dbd...),都有相同的存储过程 p_pro,其返回值为 int 型(该 p_pro 存储过程的功能是完成对本数据库其中一个表的数据插入,并且返回该 @@identity )。2,现在要在 dbm 里面写存储过程 p_prom 调用dba,dbb,dbc... 其中一个数据库里的存储过程 p_pro 并且获得其返回值, 数据库名称 dba, dbb 等在 p_prom 里当作一个参数 @dbname 传入。请问,在 p_prom 里如何处理才能实现上述第二项要求?
然后就简单了,如果你的p_pro存储过程的返回值设置的output类型,就可以
declare @id int
exec dba..p_pro @id output如果不是,就麻烦一点了,需要先创建一个临时表然后
insert into #t exec dba..p_pro
----------------
USE DBM
GOCREATE PROCEDURE P_PROM @DB_Name VARCHAR(18)
AS
BEGIN
DECLARE @SQL VARCHAR(128)
SET @SQL ='EXEC '+@DB_Name+'.DBO.P_PRO'
EXEC(@SQL)
END
---------------------调用存储过程
EXEC DBM.[dbo].[PRO_PM] @DB_Name = N'TEST2'
--------------------------
如果有其他的参数,LZ自己想办法拼接进@SQL好了
----------------
USE DBM
GOCREATE PROCEDURE P_PROM @DB_Name VARCHAR(18)
AS
BEGIN
DECLARE @SQL VARCHAR(128)
SET @SQL ='EXEC '+@DB_Name+'.DBO.P_PRO'
EXEC(@SQL)
END
---------------------调用存储过程
EXEC DBM.[dbo].[PRO_PM] @DB_Name = N'DBA'
--------------------------
如果有其他的参数,LZ自己想办法拼接进@SQL好了
为什么LZ就是不听我的话呢,我说了“其他的参数可以拼接上去”。存储过程的参数分为两种,Input与Output,无论哪种都是参数,明白了没?要是还不明白,那就看看下述的例子吧CREATE PROCEDURE [dbo].[PRO_P] @IDENTITY INT OUTPUT
AS
BEGIN
INSERT INTO UserInfo( Name)
VALUES(N'张三')
SELECT @IDENTITY= @@IDENTITY
END
CREATE PROCEDURE [dbo].[PRO_PM] @DB_Name VARCHAR(12)
AS
BEGIN
DECLARE @SQL VARCHAR(128)
SET @SQL='DECLARE @RESULTID INT '
SET @SQL =@SQL+'EXEC '+@DB_Name+'.DBO.PRO_P @RESULTID OUTPUT '
SET @SQL=@SQL+'SELECT @RESULTID AS RESULTID'
EXEC(@SQL)
END[img=http://img.my.csdn.net/uploads/201303/25/1364181172_7728.jpg]UC?
OK?