SQL 在 where 子句中过滤
SQL Filter in the where clause
我不确定如何 100% 解决这个问题,但我认为它可能会使用动态 SQL。用户希望能够使用 GUI 上的复选框来传递变量。并非所有的复选框都会被选中传递数据。一次只会检查几个。无论如何,我投给了单选框,所以现在的问题是我必须根据他们传入的已检查变量进行过滤。所以在WHERE子句中需要动态过滤。我很少使用 Dynamic SQL,而且我不是 DBA。因此,如果我传入两个带有数据的值,一个为空,当其中一个值为空或空时,如何防止它在 Where 子句中进行过滤。
像这样:
DECLARE
@obj1 AS NVARCHAR(10) = 'data',
@obj2 AS NVARCHAR(10) = 'data',
@obj3 AS NVARCHAR(10) = '',
SELECT something FROM Table WHERE
IF @obj1 is not null then filter,
If @obj2 is not null then filter,
If @obj3 is not null then filter
使用OR
:
SELECT *
FROM Table
WHERE (@obj1 IS NULL OR ( ... filter with @obj1 here ) ) AND
(@obj2 IS NULL OR ( ... filter with @obj2 here ) ) AND
(@obj3 IS NULL OR ( ... filter with @obj3 here ) )
例如,如果@obj1 是NULL
,那么有关@obj1
的相应谓词将从WHERE
子句中删除。
我不确定如何 100% 解决这个问题,但我认为它可能会使用动态 SQL。用户希望能够使用 GUI 上的复选框来传递变量。并非所有的复选框都会被选中传递数据。一次只会检查几个。无论如何,我投给了单选框,所以现在的问题是我必须根据他们传入的已检查变量进行过滤。所以在WHERE子句中需要动态过滤。我很少使用 Dynamic SQL,而且我不是 DBA。因此,如果我传入两个带有数据的值,一个为空,当其中一个值为空或空时,如何防止它在 Where 子句中进行过滤。
像这样:
DECLARE
@obj1 AS NVARCHAR(10) = 'data',
@obj2 AS NVARCHAR(10) = 'data',
@obj3 AS NVARCHAR(10) = '',
SELECT something FROM Table WHERE
IF @obj1 is not null then filter,
If @obj2 is not null then filter,
If @obj3 is not null then filter
使用OR
:
SELECT *
FROM Table
WHERE (@obj1 IS NULL OR ( ... filter with @obj1 here ) ) AND
(@obj2 IS NULL OR ( ... filter with @obj2 here ) ) AND
(@obj3 IS NULL OR ( ... filter with @obj3 here ) )
例如,如果@obj1 是NULL
,那么有关@obj1
的相应谓词将从WHERE
子句中删除。