我在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?
答案 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