2012-03-24 15 views
29

Wiem, jak sprawdzić, czy parametr jest pusty, ale nie wiem, jak sprawdzić, czy jest pusty ... Mam te parametry i chcę sprawdzić poprzednie parametry są puste lub puste, a następnie ustaw je poniżej:Sprawdź, czy parametr jest pusty lub pusta w procedurze przechowywanej.

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

Byłbym wdzięczny za pomoc.

Odpowiedz

58

Czasami używam NULLIF jak tak ...

IF NULLIF(@PreviousStartDate, '') IS NULL 

Nie ma chyba żadnego powodu, to lepiej niż sposób sugerowany przez @Oded i @bluefeet, tylko preferencje stylistyczne.

@ metoda danihp jest naprawdę fajne, ale mój zmęczony stary mózg nie pójdzie do koalescencji gdy myślę jest null lub pusty :-)

+2

Witam Rex, ponieważ przeczytałem twoją odpowiedź, przeniosłem się do twojej notacji. – danihp

24

Oto ogólny wzór:

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

'' jest pusty ciąg znaków w SQL Server.

+0

myślę, że powinno być: 'IF (@PreviousStartDate jest zerowy lub @PreviousStartDate = '') ' –

2

można użyć:

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

Ten sam kod jak Oded i ta sama misspell? –

+1

@pavel dzięki za wskazanie znaku missin @, ale można zobaczyć na podstawie znacznika czasu, który został wysłany w tym samym czasie. – Taryn

0

polecam sprawdzanie niepoprawnych dat też:

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

Co z łączeniem coalesce i nullif?

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

Można spróbować to: -

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

Jeśli chcesz „Null, pusta lub biała spacja "sprawdź, możesz uniknąć niepotrzebnej manipulacji ciągami przy pomocy LTRIM i RTRIM w ten sposób.

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

Jeśli chcesz użyć parametru Opcjonalnie, użyj go.

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

Aby sprawdzić, czy zmienna jest null lub pusty użyj:

IF LEN(ISNULL(@var, '')) = 0 
Powiązane problemy