2012-03-24 258 views
29

我知道如何檢查一個參數是否爲空,但我不知道如何檢查它是否空......我有這些參數,我想檢查以前參數是空的或空的,然後像下面那樣設置它們:檢查存儲過程中的參數是否爲空或空

ALTER PROCEDURE [dbo].[GetSummary] 
    @PreviousStartDate NVARCHAR(50) , 
    @PreviousEndDate NVARCHAR(50) , 
    @CurrentStartDate NVARCHAR(50) , 
    @CurrentEndDate NVARCHAR(50) 
AS 
    BEGIN 
    IF(@PreviousStartDate IS NULL OR EMPTY) 
     SET @PreviousStartdate = '01/01/2010' for example.. 

我希望得到幫助。

回答

58

我有時用NULLIF是這樣的...

IF NULLIF(@PreviousStartDate, '') IS NULL 

有可能是沒有理由它比好@Oded和@bluefeet建議的方式,只是文體偏好。

@ danihp的方法真的是很酷,但我厭倦了舊的大腦不會去的時候我想凝聚爲空或空:-)

+2

嗨,雷克斯,因爲我已經閱讀你的答案,我轉移到你的符號。 – danihp 2012-04-24 13:31:39

24

這裏是一般模式:

IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '') 

''是SQL Server一個空字符串。

+0

我認爲它應該是:'IF(@PreviousStartDate爲空或@PreviousStartDate = '')' – 2012-12-19 23:03:59

2

你可以使用:

IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '') 
+1

相同的代碼Oded和相同的拼寫錯誤? – 2012-12-19 23:06:03

+1

@pavel感謝您指出missin @標誌,但您可以從時間戳中看到它們同時發佈。 – Taryn 2012-12-19 23:38:27

10

我用coalesce

IF (COALESCE(@PreviousStartDate, '') = '') ... 
0

我建議檢查無效日期太:

set @PreviousStartDate=case ISDATE(@PreviousStartDate) 
    when 1 then @PreviousStartDate 
     else '1/1/2010' 
    end 
3

如何結合​​3210和nullif

SET @PreviousStartDate = coalesce(nullif(@PreviousStartDate, ''), '01/01/2010') 
0

你可以試試這個: -

IF NULLIF(ISNULL(@PreviousStartDate,''),'') IS NULL 
SET @PreviousStartdate = '01/01/2010' 
0

如果你想要一個「空,空白或空格「檢查,您可以用避免不必要的字符串操作0和RTRIM這個樣子。

IF COALESCE(PATINDEX('%[^ ]%', @parameter), 0) > 0 
    RAISERROR ... 
1

如果你想使用一個參數是可選的,所以使用它。

CREATE PROCEDURE uspGetAddress @City nvarchar(30) = NULL, @AddressLine1 nvarchar(60) = NULL 
    AS 
    SELECT * 
    FROM AdventureWorks.Person.Address 
    WHERE City = ISNULL(@City,City) 
    AND AddressLine1 LIKE '%' + ISNULL(@AddressLine1 ,AddressLine1) + '%' 
    GO 
1

要檢查是否變量爲空或空使用本:

IF LEN(ISNULL(@var, '')) = 0