【发布时间】:2019-01-22 22:06:10
【问题描述】:
我想在 case 语句中执行一个存储过程,但我卡住了,因为我不能像以前用 IF 语句那样执行两件事!这是我的代码:
CREATE OR ALTER PROCEDURE dbo.selectBooks
as
begin
DECLARE @ArchivedBooks AS TABLE ([Books] varchar(100))
INSERT INTO @ArchivedBooks(Books)
select name
FROM ArchivedBooks
SELECT id,
bookId,
name,
CASE
WHEN (name IN (SELECT Books FROM @ArchivedBooks)) THEN 'archivedBook'
// but i want also to execute a stored procedure that will insert the
book
exec dbo.insertBook @name;
ELSE 'noArchivedBook' as status
FROM books
end
【问题讨论】:
-
SQL Server 中的
CASE不是语句,而是表达式。CASE表达式 只能返回一个标量值,它们不能执行存储过程。如果您希望从 SP 返回值,最好使用函数(内联表值函数 tend 性能更好)。如果您发布您的 SPdbo.insertBook的 DDL,我们应该能够为您提供进一步的帮助;但是,您的 SP 的名称暗示您想要INSERT一些数据,您*不能在CASE表达式中(或在@987654327 @ 声明)。 -
简答:你不能这样做。更长的答案:将名称写入临时表(以名称作为主键),然后使用 WHILE LOOP 为表中的每一行调用存储过程。或者,如果必须,请使用 FAST_FORWARD 游标。
标签: sql-server stored-procedures