如何使用T-SQL函数从表中获取所有行

时间:2013-08-02 02:29:26

标签: sql sql-server database

执行此查询时,我不会在EXT_NO

中获得带空值的行
SELECT * 
FROM KM_USER_MAST 
WHERE EXT_NO = DBO.KM_GET_SRCH_PARAM(NULL, EXT_NO)  

我的目的是在第一个param为null时获取包括null的所有行。

这是程序的代码。

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

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

3 个答案:

答案 0 :(得分: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 = ''

答案 1 :(得分: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;

答案 2 :(得分: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