Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/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 Proc(如果其他程序不工作)_Sql_Sql Server - Fatal编程技术网

SQL Proc(如果其他程序不工作)

SQL Proc(如果其他程序不工作),sql,sql-server,Sql,Sql Server,我正在尝试创建一个SQL过程,它如下所示: If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '1') Begin // do this End Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue

我正在尝试创建一个SQL过程,它如下所示:

If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '1') 
Begin
// do this 
End

Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '0')
Begin
// do this 
End
在这之前,它一直在发挥应有的作用。但是,接下来的两个语句不起作用,我想知道为什么

Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowNoCustomers' And ParValue = '1')
If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '1')
Begin
//do this
End

Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowNoCustomers' And ParValue = '1')
If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '0')
Begin
//do this
End
默认情况下,StnNuthCualPar值为100%肯定值1,但我可以将它在应用程序中更改为0。
没有错误,但它只是不执行ShowNoCustomer为1时我希望它执行的sql。

我相信,将子ifs嵌套在else ifs的begin/end对中可以解决此问题,从而确保每个语句都以真实的方式激发

Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowNoCustomers' And ParValue = '1')
    begin
        If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '1')
            Begin
            //do this
            End
        /*Else*/ If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '0')
            Begin
            //do this
            End
    end

我相信,将子ifs嵌套在else ifs的开始/结束对中可以解决这个问题,确保每个语句都以一个真实的

Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowNoCustomers' And ParValue = '1')
    begin
        If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '1')
            Begin
            //do this
            End
        /*Else*/ If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '0')
            Begin
            //do this
            End
    end

我认为您的逻辑是有缺陷的,并且您没有完全使用begin/end来嵌套所有应该嵌套的内容。这应该是等效的,并且逻辑正确:

Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowNoCustomers' And ParValue = '1')
Begin
    If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '1')
    Begin
        //do this
    End
    Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '0')
    Begin
        //do this
    End
End
如果存在Else,则无需重复从ST_设置中选择1,其中参数='KWI_TR_ShowNoCustomers'和ParValue='1',并且缺少begin/ends会使您对执行路径感到困惑

或者,此版本更为简洁,当ShowStartEndTimeInd值为0时,将进行1次查询而不是2次查询:

Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowNoCustomers' And ParValue = '1')
Begin
    --using a variable so we only have to do the query once
    Declare @ShowStartEndTimeVal varchar(5)
    Select @ShowStartEndTimeVal = ParValue From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' 

    If @ShowStartEndTimeVal = '1'
    Begin
        //do this
    End
    Else If @ShowStartEndTimeVal = '0'
    Begin
        //do this
    End
End

我认为您的逻辑是有缺陷的,并且您没有完全使用begin/end来嵌套所有应该嵌套的内容。这应该是等效的,并且逻辑正确:

Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowNoCustomers' And ParValue = '1')
Begin
    If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '1')
    Begin
        //do this
    End
    Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' And ParValue = '0')
    Begin
        //do this
    End
End
如果存在Else,则无需重复从ST_设置中选择1,其中参数='KWI_TR_ShowNoCustomers'和ParValue='1',并且缺少begin/ends会使您对执行路径感到困惑

或者,此版本更为简洁,当ShowStartEndTimeInd值为0时,将进行1次查询而不是2次查询:

Else If exists (Select 1 From ST_Setting Where Parameter = 'KWI_TR_ShowNoCustomers' And ParValue = '1')
Begin
    --using a variable so we only have to do the query once
    Declare @ShowStartEndTimeVal varchar(5)
    Select @ShowStartEndTimeVal = ParValue From ST_Setting Where Parameter = 'KWI_TR_ShowStartEndTimeInd' 

    If @ShowStartEndTimeVal = '1'
    Begin
        //do this
    End
    Else If @ShowStartEndTimeVal = '0'
    Begin
        //do this
    End
End

有没有可能ParValue是空的?在KWI_TR_shownocustomers中,什么意思是“不工作”?产生了什么错误?参数值为1,根本没有错误。当shownocustomers中的Parvalue为1时,我什么也得不到。我认为我的Sql语句是错误的..ParValue是否可能为null?在KWI_TR_shownocustomers中,什么意思是“不工作”?产生了什么错误?参数值为1,根本没有错误。当shownocustomers中的Parvalue为1时,我什么也得不到。我认为我的Sql语句是错误的。我不认为第二个Else If exists从ST_设置中选择1,其中参数='KWI_TR_ShowNoCustomers'和ParValue='1'将在这里触发,因为Else部分。好的地方,我已经删除了冗余并更新了上面的代码,包括一个注释掉的else,以防OP需要第一个事件来排除下面的事件。我不认为第二个else(如果存在)从ST_设置中选择1,其中参数='KWI_TR_ShowNoCustomers'和ParValue='1'将在此处触发,因为另一部分。好的地方,我已经删除了冗余并更新了上面的代码,包括一个注释掉的else,以防OP需要第一个事件来排除下面的事件