检查存储过程中参数是空还是空

时间:2012-03-24 20:31:24

标签: sql sql-server-2008 stored-procedures parameters null

我知道如何检查一个参数是否为null但我不知道如何检查它是否为空...我有这些参数,我想检查以前的参数是空的还是null然后设置它们如下< / p>

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..

我很感激帮助。

12 个答案:

答案 0 :(得分:66)

我有时会像NULLIF那样使用......

IF NULLIF(@PreviousStartDate, '') IS NULL

可能没有理由比@Oded和@bluefeet建议的方式更好,只是风格偏好。

@ danihp的方法非常酷,但是当我认为空或空时,我疲惫不堪的老大脑不会去COALESCE: - )

答案 1 :(得分:29)

以下是一般模式:

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

''是SQL Server中的空字符串。

答案 2 :(得分:11)

我使用coalesce

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

答案 3 :(得分:3)

如何合并coalescenullif

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

答案 4 :(得分:3)

另一种选择:

IF ISNULL(@PreviousStartDate, '') = '' ...

http://weblogs.sqlteam.com/mladenp/archive/2007/06/13/60231.aspx

上查看基于此表达式的函数

答案 5 :(得分:2)

你可以使用:

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

答案 6 :(得分:2)

要检查变量是null还是空,请使用以下命令:

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

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

答案 8 :(得分:0)

我建议也检查无效日期:

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

答案 9 :(得分:0)

你可以试试这个: -

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

答案 10 :(得分:0)

如果你想要一个空白,空白或空白的空间&#34;检查,您可以避免使用LTRIMRTRIM进行不必要的字符串操作。

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

答案 11 :(得分:0)

要检查变量是否为null或为空,请使用此

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