我需要执行存储过程,他的ID将是另一个存储过程的执行。我怎么能这样做?
ALTER PROCEDURE [dbo].[spABC]
@ID INT
,@TypeString nvarchar(50)
AS
BEGIN
--exec SECOND_SP
INSERT INTO dbo.abc (Id, TypeString)
VALUES (@"result from the second sp.", @TypeString)
END
答案 0 :(得分:1)
不确定为什么所有人都对这个问题投了赞成票。英语可能有点弱,但存储过程参数是神秘的。
您必须将过程和EXEC定义为传递参数并期望OUTPUT。存储过程可以包含RETURN,但我很确定该值始终是INTEGER,而OP需要一个字符串。
例如:
BEGIN TRANSACTION
GO
CREATE PROCEDURE dbo.SECOND_SP (@ID INT, @Type VARCHAR(9) OUTPUT)
AS
-- totally arbitrary, pretend logic for second sp for illustrative purposes
SET @Type = CASE WHEN @ID > 90000 THEN 'ADMIN'
WHEN @ID > 9000 THEN 'MANAGER' ELSE 'USER' END
GO
CREATE PROCEDURE [dbo].[spABC]
@ID INT
AS
BEGIN
DECLARE @TypeString VARCHAR(9)
exec SECOND_SP @ID, @Type = @TypeString OUTPUT
SELECT @ID, @TypeString
-- INSERT INTO dbo.abc (Id, TypeString) VALUES (@"result from the second sp.", @TypeString)
END
GO
--TEST IT .....
EXEC [dbo].[spABC] 1111
EXEC [dbo].[spABC] 9123
EXEC [dbo].[spABC] 99543
ROLLBACK
--- RESULTS:
1111 USER
----------- ---------
9123 MANAGER
----------- ---------
99543 ADMIN
答案 1 :(得分:1)
正如Gordon在评论中写道,你可以在第二个存储过程中有一个output
参数。另一个选择是使用rahul' s example(如果第二个存储过程只返回一个标量值)
这是一个简单的例子:
CREATE PROCEDURE Second_SP
(
@InParam varchar(10),
@OutParam int OUTPUT -- note the OUTPUT directive
)
AS
-- do stored procedure stuff here
-- set a value to the output parameter:
SET @OutParam = 1234
GO
在第一个存储过程中,您应该在执行第二个过程时使用output
指令:
ALTER PROCEDURE [dbo].[spABC]
@ID INT
,@TypeString nvarchar(50)
AS
BEGIN
DECLARE @InParam varchar(10),
@OutParam int
-- set parameters values before executing...
exec SECOND_SP @InParam, @OutParam OUTPUT -- note the output directive
INSERT INTO dbo.abc (Id, TypeString)
VALUES (@OutParam, @TypeString)
END
答案 2 :(得分:1)
如果您无法更新callback(timeout=22, verbose=False)
以将值作为SECOND_SP
参数返回,并且该存储过程返回单行,则可以将其插入临时表(即OUTPUT
)或表变量(即#Table
),然后从该表中获取值。有点像:
@Table
答案 3 :(得分:0)
根据您的帖子,考虑到您的第二个过程SECOND_SP
需要@ID
参数,并且您希望将第二个过程的返回值赋予INSERT
语句。你可以这样做
ALTER PROCEDURE [dbo].[spABC]
@ID INT
,@TypeString nvarchar(50)
AS
BEGIN
declare @var int;
exec @var = SECOND_SP @ID;
INSERT INTO dbo.abc (Id, TypeString)
VALUES (@var, @TypeString)
END
编辑:
来自@srutzky的评论。尝试以下操作,看看是否有效
create procedure test
as
begin
return 1009;
end
declare @var int;
exec @var = test;
select @var;