Je sais comment vérifier si un paramètre est null mais je ne suis pas sûr de savoir s'il est vide ... J'ai ces paramètres et je veux vérifier que les paramètres précédents sont vides ou nuls, puis les définir comme ci-dessous
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..
Je vous serais reconnaissant de l'aide.
J'utilise parfois NULLIF comme si ...
IF NULLIF(@PreviousStartDate, '') IS NULL
Il n'y a probablement aucune raison pour que ce soit mieux que le chemin suggéré par @Oded et @bluefeet, juste une préférence stylistique.
La méthode de @ danihp est vraiment cool mais mon vieux cerveau fatigué n'irait pas à COALESCE quand je pense que c'est nul ou vide :-)
Voici le schéma général:
IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')
''
est une chaîne vide dans SQL Server.
J'utilise coalesce :
IF ( COALESCE( @PreviousStartDate, '' ) = '' ) ...
Pourquoi ne pas associer coalesce
et nullif
?
SET @PreviousStartDate = coalesce(nullif(@PreviousStartDate, ''), '01/01/2010')
Une autre option:
IF ISNULL(@PreviousStartDate, '') = '' ...
voir une fonction basée sur cette expression à l'adresse http://weblogs.sqlteam.com/mladenp/archive/2007/06/13/60231.aspx
vous pouvez utiliser:
IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')
Pour vérifier si la variable est nulle ou vide, utilisez ceci:
IF LEN(ISNULL(@var, '')) = 0
Si vous souhaitez utiliser un paramètre est facultatif, utilisez-le.
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
Vous pouvez essayer ceci: -
IF NULLIF(ISNULL(@PreviousStartDate,''),'') IS NULL
SET @PreviousStartdate = '01/01/2010'
Si vous souhaitez une vérification "Null, espace vide ou espace blanc", vous pouvez éviter toute manipulation inutile des chaînes avec LTRIM
et RTRIM
comme ceci.
IF COALESCE(PATINDEX('%[^ ]%', @parameter), 0) > 0
RAISERROR ...
Je recommande également de vérifier les dates non valides:
set @PreviousStartDate=case ISDATE(@PreviousStartDate)
when 1 then @PreviousStartDate
else '1/1/2010'
end