在存储过程(A)中,我需要在特定数据库中调用存储过程(X)并捕获输出。 X返回单个值。
根据我的理解,我需要为A中的存储过程提供X的DB名称,我需要使用动态SQL来构建针对所需数据库的执行查询。
无法弄清楚的是如何从A中捕获X中的输出以使用结果。
答案 0 :(得分:3)
您可以使用sp_executesql
动态调用嵌套的存储过程。
DECLARE @db AS SYSNAME
DECLARE @return_value AS INT
DECLARE @output_value AS INT
DECLARE @sql AS NVARCHAR(MAX)
-- Set your DB name
SET @db = N'mydb'
/*
Use sp_executesql to dyanmically pass in the db and stored procedure
to execute while also defining the values and assigning to local variables.
*/
SET @sql = N'EXEC @rtn = ' + @db + '.dbo.[your_stored_procedure] @output OUTPUT'
EXEC sp_executesql @sql
, N'@rtn AS INT, @output AS INT OUTPUT'
, @return_value = @rtn
, @output_value = @output OUTPUT
答案 1 :(得分:-1)
添加上述答案,以下是通过传递参数动态调用存储过程的方法。
DECLARE @SpName VARCHAR(1000)
SELECT @SpName = DeleteLiveSP FROM dbo.ArchivalInfo (NOLOCK) WHERE TableName = @TableName
DECLARE @SqlString nvarchar(2000)
DECLARE @ParamDef nvarchar(2000)
SET @SqlString = N'exec '+@SpName + ' @CriteriaParam'
SET @ParamDef = N'@CriteriaParam XML'
EXECUTE sp_executesql @SqlString ,@ParamDef, @CriteriaParam = @Criteria