0

执行此查询时,我没有在EXT_NO列中获得带有 null 的行

SELECT * 
FROM KM_USER_MAST 
WHERE EXT_NO = DBO.KM_GET_SRCH_PARAM(NULL, EXT_NO)  

我的意图是在第一个参数为空时获取包括空的所有行。

这是程序的代码。

ALTER function [dbo].[KM_GET_SRCH_PARAM](
   @param VARCHAR(8000)
   , @whereParam VARCHAR(8000) )
returns varchar(8000)
as
begin
    declare @returnValue varchar(8000);

    IF @param IS NULL OR @param = ''
       SET @returnValue = ISNULL(@whereParam,'');
    ELSE
       SET @returnValue = @param;

    return @returnValue
end

任何获取所有行的方法???

4

3 回答 3

1

我不明白您的功能要达到什么目的?

如果要检索 EXT_NO 具有空值的所有行:

SELECT * 
FROM KM_USER_MAST 
WHERE EXT_NO IS NULL

我错过了什么吗?

如果您想要所有值为“null”或空字符串“”的行,则:

SELECT * 
FROM KM_USER_MAST 
WHERE EXT_NO IS NULL OR EXT_NO = ''
于 2013-08-02T07:55:54.883 回答
0

您无法NULL以使用函数的方式获取值。对于 xxx 的所有值,该表达式的NULL = xxx计算结果为 false。

相反,您可以将where子句编写为:

SELECT *
FROM KM_USER_MAST
WHERE DBO.KM_GET_SRCH_PARAM(NULL, EXT_NO) = 1;

并将函数定义为:

ALTER function [dbo].[KM_GET_SRCH_PARAM](
                                @param          VARCHAR(8000),
                                @whereParam     VARCHAR(8000)
                            )
returns int
as    begin
    declare @returnValue int;
    IF @param IS NULL OR @param = ''
        SET @returnValue = 1;
    ELSE
        SET @returnValue = (case when @param = @WhereParam then 1 else 0 end);
    return @returnValue;
end;
于 2013-08-02T02:41:17.593 回答
0
SELECT * 
FROM KM_USER_MAST 
WHERE EXT_NO = COALESCE(NULL, EXT_NO)  

或者

 SELECT * 
    FROM KM_USER_MAST 
    WHERE EXT_NO = ISNULL(NULL, EXT_NO)  

用参数替换 null

于 2013-08-02T08:51:41.350 回答