2013-08-02 18 views
0

當執行此查詢我不明白在EXT_NO如何使用T-SQL函數

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

我的目的是讓所有的行,包括空當用空行得到表中的所有行第一個參數是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 

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

+0

你是什麼東西替換空試圖用功能來實現?在表列上應用函數可防止服務器使用索引。可能有更好的方法來做任何你想在這裏做的事情 –

回答

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; 
+0

不可置信的。按照您的解釋正確工作....非常感謝。 – Hellfire7707

1

我不明白你的函數試圖達到什麼目的?

如果你想檢索與空值的所有行的EXT_NO

SELECT * 
FROM KM_USER_MAST 
WHERE EXT_NO IS NULL 

我這麼想嗎?

如果你想與價值 '空' 或空字符串 '',那麼所有行:

SELECT * 
FROM KM_USER_MAST 
WHERE EXT_NO IS NULL OR EXT_NO = '' 
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) 

與參數