User Stored Proc返回NULL - 基础查询按计划工作

时间:2014-03-07 20:51:49

标签: sql sql-server tsql stored-procedures

是的,这是另一个。标题几乎相同的问题不适用,或者我没有看到连接。

我的usp看起来像这样:

>    CREATE PROCEDURE uspHasItem
>         @sr_id INT,
>         @ActionableItem VARCHAR(1) OUTPUT
>    AS BEGIN
>         SELECT @ActionableItem = (CASE
>         WHEN EXISTS (
>                      SELECT stuff FROM here
>                       WHERE condition
>                         AND field = (
>                                      SELECT MAX(something)
>                                        FROM another_place
>                                       WHERE field1 = @sr_id)
>                     )
>         THEN '1'
>         ELSE '0' END);
>     END
>     RETURN

我以习惯的方式称呼它,AFAIK:

DECLARE @Actionable VARCHAR(1);
EXEC uspHasItem
    @sr_id = 1222,
    @ActionableItem = @Actionable;
SELECT @Actionable AS AI;

我可以验证输入值是否有效并且与我提供的内容无关,在任何情况下输入值都无关紧要 - 我总是将NULL作为输出。

现在,如果我提取该查询并调整它,则从表中提供@sr_id值:

SELECT
 SRT.SR_ID,
 CASE
        WHEN EXISTS (
                     SELECT stuff FROM here
                      WHERE condition
                        AND field = (
                                     SELECT MAX(something)
                                       FROM another_place
                                      WHERE field1 = SRT.SR_ID)
                    )
        THEN '1'
        ELSE '0' END AS ACTIONABLE
FROM SRTABLE SRT;

我得到了我期望的结果。我没有看到问题,也没有收到任何错误。

如何才能获得任何值,并且我之后用SELECT语句测试执行usp,实际问题是什么?建议?

2 个答案:

答案 0 :(得分:3)

你忘记了output吗?

DECLARE @Actionable VARCHAR(1)

EXEC uspHasItem
    @sr_id = 1222,
    @ActionableItem = @Actionable output
SELECT @Actionable AS AI

答案 1 :(得分:-1)

当你运行你的过程时,不要放一个;在每一行之后,这会打破范围,同时添加OUTPUT

DECLARE @Actionable VARCHAR(1)
EXEC uspHasItem
    @sr_id = 1222,
    @ActionableItem = @Actionable OUTPUT
SELECT @Actionable AS AI;