我有一个问题,我有一个存储过程,它返回一个值。此存储过程正在另一个SP中执行,我需要将值传输到此SP中。我怎样才能做到这一点。
任何帮助将不胜感激。
谢谢
示例:
CREATE PROC [dbo].[isp_CREATE_CONFIG]
@CFG_KEY VARCHAR(15)
, @CFG_SHORTVALUE INT
, @CFG_LONGVALUE VARCHAR(200)
, @CFG_DESC VARCHAR(250)
, @CFG_SHORT_DESC VARCHAR(100)
, @CFG_MISC1 VARCHAR(50)
, @CFG_MISC2 VARCHAR(50)
, @CFG_MISC3 VARCHAR(50)
, @CFG_MISC4 VARCHAR(50)
, @CFG_MISC5 VARCHAR(50)
, @CFG_USER VARCHAR(20)
, @CFG_MSG VARCHAR(250) OUTPUT
AS
DECLARE
@c_ErrMsg VARCHAR(200)
, @c_ErrNum VARCHAR(5)
, @c_Continue INT
, @c_Date VARCHAR(20)
/* Assign value to local variables */
SET @c_Date = GETDATE()
SET @c_Continue = 0
/* Run Validations */
IF EXISTS (SELECT 1 FROM CONFIG(NOLOCK) WHERE cfg_key = @CFG_KEY)
BEGIN
SET @c_ErrNum = 60001
SET @c_ErrMsg = 'Configuration Key (' + @CFG_KEY + ') already exist. Please check System Configuration. Error: ' + @c_ErrNum
SET @CFG_MSG = @c_ErrMsg
SET @c_Continue = 1
END
/* Create Configuration */
SET @CFG_MSG = ''
IF @c_Continue = 0
BEGIN
IF NOT EXISTS(SELECT 1 FROM CONFIG(NOLOCK) WHERE cfg_key = @CFG_KEY)
BEGIN
INSERT INTO CONFIG
(
cfg_key , cfg_short_value , cfg_long_value , cfg_desc ,cfg_short_desc
, cfg_misc1 , cfg_misc2 , cfg_misc3 , cfg_misc4
, cfg_misc5 , cfg_add_who , cfg_edit_date , cfg_edit_who
)
VALUES
(
@CFG_KEY , @CFG_SHORTVALUE , @CFG_LONGVALUE , @CFG_DESC , @CFG_SHORT_DESC
, @CFG_MISC1 , @CFG_MISC2 , @CFG_MISC3 , @CFG_MISC4
, @CFG_MISC5 , @CFG_USER , @c_Date , @CFG_USER
)
SET @CFG_MSG = 'Configuration has been created.'
END
END
GO
答案 0 :(得分:2)
返回值的存储过程有一个声明为OUTPUT的参数,如下所示:
CREATE PROCEDURE my_returning_proc (@ret VARCHAR(10) OUTPUT) AS
BEGIN .... END
如果你想使用这个值,你需要像这样调用STORED PROCEDURE:
DECLARE @var VARCHAR(10);
EXEC my_returning_proc @var OUTPUT;
PRINT @var
这里的关键是将OUTPUT添加到EXEC语句
中编辑:感谢您提供示例。 对于您的情况,您可以像这样调用存储过程:
DECLARE @var_returned VARCHAR(250);
EXEC [dbo].[isp_CREATE_CONFIG] 'BLAH', 0, 'BLAH', 'BLAH', 'BLAH', ......, @var_returned OUTPUT
答案 1 :(得分:1)
通过返回一个值,我假设您的意思是使用return
。您还可以声明存储过程的输出参数。
以下是:
declare @retval int;
exec @retval = <stored procedure call>
以下是任何人都可以尝试的简单代码示例:
create procedure dum as return 5
declare @retval int;
exec @retval = dum
select @retval
我一直使用这种技术从存储过程返回状态。