我有一个名为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并在第二个存储过程中使用它。
关于评论的任何问题。
答案 0 :(得分:3)
执行存储过程时以及定义存储过程时,需要指定OUTPUT
:
EXEC clients @clientname, @id OUTPUT, @msg OUTPUT;
答案 1 :(得分:1)
在将参数传递给存储过程时,您是否错过了clients
关键字?此外,我会更改char(1)
存储过程并将参数设为@messg char(1) OUTPUT
而非declare -A