Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server TSQL-如何实现;不在「;案件中的陈述_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Sql server SQL Server TSQL-如何实现;不在「;案件中的陈述

Sql server SQL Server TSQL-如何实现;不在「;案件中的陈述,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我有以下工作代码: INSERT INTO #resultado SELECT 1, v.idReqVoucher, v.dtSolicitacao, v.idFuncionario_solicitante, v.idFuncionario_beneficiario, v.idStatus, NULL as valor FROM reqVoucher v

我有以下工作代码:

    INSERT INTO #resultado

    SELECT  1,

        v.idReqVoucher,
        v.dtSolicitacao,
        v.idFuncionario_solicitante,
        v.idFuncionario_beneficiario,
        v.idStatus,         
        NULL as valor
    FROM reqVoucher v
    WHERE
         v.idReqVoucher =  
            CASE WHEN @idRequisicao = 0 THEN v.idReqVoucher
            ELSE @idRequisicao END
        AND v.idStatus =  
            CASE WHEN @status = 0 THEN v.idStatus
            ELSE @status END

        AND v.dtSolicitacao >= CASE WHEN @dtSolicitacaoIni IS NULL THEN v.dtSolicitacao ELSE  @dtSolicitacaoIni END
        AND v.dtSolicitacao <= CASE WHEN @dtSolicitacaoFim IS NULL THEN v.dtSolicitacao ELSE  @dtSolicitacaoFim+' 23:59:59' END

我不知道如何在我的代码中实现这一点。我对TSQL和SQL Server还不太熟悉,所以请温和一点。

这应该相当于您想要的:

 AND (
      (@status = 99) AND (v.idStatus NOT IN (5,1,4,20))
      OR
      (@status <> 99) AND (@status <> 0) AND (v.idStatus = @status)
     )
和(
(@status=99)和(v.idStatus不在(5,1,4,20))
或
(@status 99)和(@status 0)以及(v.idStatus=@status)
)

CASE
表达式只能用于返回标量值,因此不能用于返回类似
NOT IN(5,1,4,20)
的谓词。这应该与您想要的等价:

 AND (
      (@status = 99) AND (v.idStatus NOT IN (5,1,4,20))
      OR
      (@status <> 99) AND (@status <> 0) AND (v.idStatus = @status)
     )
和(
(@status=99)和(v.idStatus不在(5,1,4,20))
或
(@status 99)和(@status 0)以及(v.idStatus=@status)
)

CASE
表达式只能用于返回标量值,因此它不能用于返回类似
NOT IN(5,1,4,20)
的谓词CASE语句返回值,它不会通过更改SQL查询充当IF语句(如果是,则执行该操作)。您需要将where语句修改为以下内容:

AND (
       (@status = 99 AND v.idStatus NOT IN (5, 1, 4, 20))
       OR (@status NOT IN (0, 99) AND v.idStatus = @status)
     )

编辑:Commenter是正确的,第二次检查需要确保@status不是99。

CASE语句返回一个值,它不会通过更改SQL查询充当IF语句(如果是,则执行该操作)。您需要将where语句修改为以下内容:

AND (
       (@status = 99 AND v.idStatus NOT IN (5, 1, 4, 20))
       OR (@status NOT IN (0, 99) AND v.idStatus = @status)
     )

编辑:Commenter是正确的,第二次检查需要确保@status不是99。

或使用
CASE
表达式:


CASE
表达式返回一个必须使用的值,例如,将其与
1
进行比较。如果出现意外情况,通常最好包含
ELSE
子句以提供默认值。

或使用
CASE
表达式:


CASE
表达式返回一个必须使用的值,例如,将其与
1
进行比较。如果出现意外情况,通常最好包含
ELSE
子句以提供默认值。

您好。谢谢你的快速回复。我得到了以下错误:Msg 102,级别15,状态1,过程sp_buscaTodasRequisicoes,第180行“')附近的语法不正确。Msg 102,15级,状态1,程序sp_BuscatodasRequesties,第1106行“结束”附近语法不正确编辑:我的中断行未显示在响应字段中,奇怪。@BrunoAlbuquerque括号匹配错误。请检查我的编辑。你好。谢谢你的快速回复。我得到了以下错误:Msg 102,级别15,状态1,过程sp_buscaTodasRequisicoes,第180行“')附近的语法不正确。Msg 102,15级,状态1,程序sp_BuscatodasRequesties,第1106行“结束”附近语法不正确编辑:我的中断行未显示在响应字段中,奇怪。@BrunoAlbuquerque括号匹配错误。请检查我所做的编辑。如果
@status=99
v.idStatus=99
,则上述结果将计算为
true
,这与OP中引用的
案例
伪代码的结果相矛盾。如果
@status=99
v.idStatus=99
,则上述结果将计算为
true
,这与OP中引用的
案例
伪代码的结果相矛盾。