我想从存储过程中返回一个值,然后在另一个将在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
中存储过程返回的值?
谢谢
答案 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