从另一个执行存储过程,并返回两个变量
Posted
技术标签:
【中文标题】从另一个执行存储过程,并返回两个变量【英文标题】:Execute a stored procedure from another, and return two variables 【发布时间】:2017-03-21 12:10:09 【问题描述】:我有一个名为clients
的存储过程,它有3 个参数:第一个用于用户输入,最后两个是OUTPUT
参数。
这是代码:
CREATE PROCEDURE clients
(@name NVARCHAR(100),
@id_client int OUTPUT,
@messg varchar(1) OUTPUT)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRAN
IF NOT EXISTS (SELECT name FROM client WHERE name = @name)
BEGIN
INSERT INTO client(name) VALUES (@name);
SET @id_client = SCOPE_IDENTITY();
SET @messg = 'o'
COMMIT TRAN
END
ELSE
BEGIN
SELECT @id_client = id_client
FROM client
WHERE name = @name;
SET @messg = 'o'
COMMIT TRAN
END
END TRY
BEGIN CATCH
SET @messg = 'e'
ROLLBACK TRAN
END CATCH
END
我需要从另一个调用这个存储过程,第二个被称为updateS
,我正在尝试以下操作:
CREATE PROCEDURE updateS
(@clientname VARCHAR(100))
AS
BEGIN
SET NOCOUNT ON;
DECLARE @id INT;
DECLARE @msg VARCHAR(1);
EXEC clients @clientname, @id, @msg; --Problem here to retrieve the id
END
此存储过程有一个客户端名称的参数,但我需要检索客户端的 id,但它不起作用,因为我正在尝试。
基本上我需要获取 id 并在第二个存储过程中使用它。
关于 cmets 的任何问题。
【问题讨论】:
【参考方案1】:您需要在执行存储过程以及定义它时指定OUTPUT
:
EXEC clients @clientname, @id OUTPUT, @msg OUTPUT;
【讨论】:
哦!这正是我所需要的。非常感谢。【参考方案2】:您在将参数传递给存储过程时是否错过了output
关键字?此外,我会更改clients
存储过程并将参数设置为char(1)
,而不是像@messg char(1) OUTPUT
【讨论】:
感谢您的回答,但为什么我需要使用char
而不是varchar
?是为了性能还是其他原因?这是我第一次使用 SQL Server。
@TimeToCode,是的,它是为了性能。由于您的内容是固定的(仅 1 个字符),您将获得更好的性能。见***.com/questions/1885630/…以上是关于从另一个执行存储过程,并返回两个变量的主要内容,如果未能解决你的问题,请参考以下文章