是否有办法从案例内的存储过程返回值?

时间:2019-01-22 19:55:27

标签: sql-server stored-procedures

我想从存储过程中返回一个值,然后在另一个将在CASE WHEN语句中求值的过程中调用该存储过程。希望通过下面的代码可以更加清楚。

第一个将插入行的存储过程

CREATE PROCEDURE [dbo].[InsertBook]
    @bookName VARCHAR(50)
AS
    INSERT INTO [dbo].[Book] (bookName)
    VALUES (@bookName) 

第二个存储过程将根据if / else条件返回一个值

CREATE PROCEDURE [dbo].[verifyBook]
    @bookName VARCHAR(50)
    IF (@bookName = 'A')
    BEGIN 
        EXEC [dbo].[InsertBook] @bookName = 'A'
        SELECT 1
    END
    ELSE IF (@bookName = 'B')
    BEGIN 
        SELECT 0
    END

第三个存储过程将验证第二个存储过程返回的值:

CREATE PROCEDURE [dbo].[selectBook]
    @bookName VARCHAR(50)
    SELECT
        id, name, 
        CASE 
           WHEN [dbo].[verifyBook] @bookName =  1 
              THEN TRUE 
              ELSE FALSE 
        END AS Status
       FROM Books

但是我的第三个存储过程出错:

An expression of non-boolean type specified in a context where a condition is expected

使用一个函数,我没有问题,但是我将需要一个存储过程来插入数据。

如何验证CASE WHEN中存储过程返回的值?

谢谢

1 个答案:

答案 0 :(得分:2)

存储过程中的SELECT输出结果集,而不是返回值或输出参数。您可以INSERT…EXEC将结果加载到表变量或临时表中。

EG

CREATE OR ALTER PROCEDURE dbo.selectBook
    @bookName VARCHAR(50)
as 
begin
  declare @v table(status bit);
  insert into @v exec dbo.verifyBook @bookName;
  select status from @v; 
end