Проверьте, является ли параметр нулевым или пустым в хранимой процедуре - PullRequest
37 голосов
/ 25 марта 2012

Я знаю, как проверить, является ли параметр нулевым, но я не уверен, как проверить, является ли он пустым ... У меня есть эти параметры, и я хочу проверить, являются ли предыдущие параметры пустыми или нулевыми, а затем установить их, как показано ниже

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

Буду признателен за помощь.

Ответы [ 11 ]

66 голосов
/ 25 марта 2012

Я иногда использую NULLIF примерно так ...

IF NULLIF(@PreviousStartDate, '') IS NULL

Вероятно, нет причины, по которой это лучше, чем предложенные @Oded и @bluefeet, просто стилистическое предпочтение.

Метод @ danihp действительно классный, но мой усталый старый мозг не пошел бы в COALESCE, когда я думаю, что он нулевой или пустой: -)

29 голосов
/ 25 марта 2012

Вот общая схема:

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

'' - пустая строка в SQL Server.

11 голосов
/ 25 марта 2012

Я использую coalesce :

IF ( COALESCE( @PreviousStartDate, '' ) = '' ) ...
3 голосов
/ 30 июля 2013

Другой вариант:

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

см. Функцию на основе этого выражения в http://weblogs.sqlteam.com/mladenp/archive/2007/06/13/60231.aspx

3 голосов
/ 20 декабря 2012

Как насчет объединения coalesce и nullif?

SET @PreviousStartDate = coalesce(nullif(@PreviousStartDate, ''), '01/01/2010')
2 голосов
/ 16 июня 2016

Чтобы проверить, является ли переменная нулевой или пустой, используйте это:

IF LEN(ISNULL(@var, '')) = 0
2 голосов
/ 25 марта 2012

вы можете использовать:

IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')
1 голос
/ 15 декабря 2014

Если вы хотите использовать параметр Необязательный, используйте его.

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
0 голосов
/ 20 октября 2014

Если вам нужна проверка «Null, empty или white space», вы можете избежать ненужных манипуляций со строками с помощью LTRIM и RTRIM, как это.

IF COALESCE(PATINDEX('%[^ ]%', @parameter), 0) > 0
    RAISERROR ...
0 голосов
/ 06 декабря 2013

Вы можете попробовать это: -

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