用于验证参数的SQL逻辑

时间:2016-02-23 04:35:17

标签: sql-server logic

我在sql上有参数,在这种情况下我遇到了一个问题

declare @MonRemark varchar(10) = 's'
declare @ConfBy varchar(10)= 's'
declare @confstatus varchar(10)= 's'
declare @StatGD varchar(10)= ''
declare @StatGC varchar(50)= ''
declare @STATGTWO varchar(50)= ''



IF @MonRemark <> '' and  (@ConfBy = '' OR @confstatus = '' and (@StatGD = '' or @StatGC = '' or @STATGTWO = ''))   BEGIN
    print 'a'
END
ELSE IF  @ConfBy  <> '' and (@MonRemark = '' OR @confstatus = '' AND (@StatGD = '' or @StatGC = '' or @STATGTWO = '')) BEGIN
    print 'b'
END
ELSE IF @confstatus  <> '' and @MonRemark = '' AND @ConfBy = '' AND (@StatGD = '' or @StatGC = '' or @STATGTWO = '') BEGIN
    print 'c'
END
ELSE IF   (@StatGD <> '' or @StatGC <> '' or @STATGTWO <> '')  and @confstatus  = '' AND @MonRemark = '' AND @ConfBy = '' BEGIN
    print 'd'
END
ELSE BEGIN
    print 'e'
END

如果我像上面写的那样填写参数,我希望得到A,但它总是打印E,有没有办法获得A?

1 个答案:

答案 0 :(得分:2)

改变你的状况。我认为@Cyan和@JTR已经提供了足够的解释为什么你得到值'e'

尝试这样,我已经修改了你的条件以获得所需的结果。

DECLARE @MonRemark VARCHAR(10) = 's'
DECLARE @ConfBy VARCHAR(10) = 's'
DECLARE @confstatus VARCHAR(10) = 's'
DECLARE @StatGD VARCHAR(10) = ''
DECLARE @StatGC VARCHAR(50) = ''
DECLARE @STATGTWO VARCHAR(50) = ''

IF @MonRemark <> ''
    AND (
        (
            @ConfBy = ''
            OR @confstatus = ''
            )
        OR (
            @StatGD = ''
            OR @StatGC = ''
            OR @STATGTWO = ''
            )
        )
BEGIN
    PRINT 'a'
END
ELSE IF @ConfBy <> ''
    AND (
        @MonRemark = ''
        OR @confstatus = ''
        AND (
            @StatGD = ''
            OR @StatGC = ''
            OR @STATGTWO = ''
            )
        )
BEGIN
    PRINT 'b'
END
ELSE IF @confstatus <> ''
    AND @MonRemark = ''
    AND @ConfBy = ''
    AND (
        @StatGD = ''
        OR @StatGC = ''
        OR @STATGTWO = ''
        )
BEGIN
    PRINT 'c'
END
ELSE IF (
        @StatGD <> ''
        OR @StatGC <> ''
        OR @STATGTWO <> ''
        )
    AND @confstatus = ''
    AND @MonRemark = ''
    AND @ConfBy = ''
BEGIN
    PRINT 'd'
END
ELSE
BEGIN
    PRINT 'e'
END