2011-03-10 98 views
1

如何使用IF語句來確定是否有多個參數有值,然後做一些工作,如果只有一個參數具有值,則執行其他工作。這是可能的與SQL如果?我只是試圖確定一個參數是否有值,或者多個參數是否有價值,因爲如果這樣的話我需要做一些完全不同的事情。我試圖做一個SQL語句,但它沒有正常工作。任何人都可以將我指向正確的方向嗎?SQL確定參數是否有值

+0

我假設所有的參數都是各種類型的? – 2011-03-10 15:57:08

回答

11

在SQL來檢查,如果參數具有值,你應該比較爲NULL值。 這裏有一個稍微過度設計例如:

Declare @Param1 int 
Declare @param2 int = 3 

IF (@Param1 is null AND @param2 is null) 
BEGIN 
    PRINT 'Both params are null' 
END 
ELSE 
BEGIN 
    IF (@Param1 is null) 
     PRINT 'param1 is null' 
    ELSE 
    IF (@Param2 is null) 
     PRINT 'param2 is null' 
    ELSE 
     PRINT 'Both params are set' 
END 
2

您可以檢查NULL值的參數值。但是,在我看來,在第一次臉紅之前,你應該檢查SQL參數之前的參數......

一旦你知道你需要做什麼,然後調用該SQL或存儲過程。

如果你這樣做,你可以簡化你的SQL,因爲你只傳遞你真正需要傳遞的參數。

其實我越想越想這樣做就越重要。您可以將NULL值用於其他事情。

簡單示例:獲取員工列表。員工處於活動狀態或非活動狀態 - 傳遞@IsActive布爾參數(如果true僅顯示活動員工,如果false僅顯示非活動員工,如果爲NULL則顯示所有員工)

1

在T-SQL中,您可以使用ISNULL函數。

1

下面是一個例子

if @param1 = 'this value' and @param2 = 'another value' 
    begin 
    -- do things here 
    end 
else if @param1 = 'something else' 
    begin 
    -- do other work 
    end 
else 
    -- do different things 
0

通過@ Catch22好你的問題提供了答案。但特別是使用IF s,並且sql中的程序性常規應保持在最小程度。所以也許下面的解決方案使用case聲明可能更適合你想要做的:

select Case When @Param1 is null and @Param2 is null Then ...-- both params null 
      When @Param1 is null then .... -- param1 is null 
      When @Param2 is null then .... -- param2 is null 
    Else .... -- both params set 
     End