Bonjour,
J'ai un problème concernant la recherche d'une date sous SQL SERVER quand celle-ci est nulle, je m'explique :
J'ai une procédure stockée suivante qui à partir d'un id une date de début et une date de fin, me retourne un objet 'PeriodVO' :
Celle-ci marche bien quand les valeurs de @startDate et @endDate ne sont pas nulles, mais quand l'une d'elle est nulle cela foire.set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ROCK_GET_PROTECTION_PREMIUM_PERIOD_BY_DATES]
@contractId int,
@startDate datetime,
@endDate datetime
AS
BEGIN
SET NOCOUNT ON;
SELECT [protection_premium_periods].[protection_premium_period_id]
,[protection_premium_periods].[contract_id]
,[protection_premium_periods].[start_date]
,[protection_premium_periods].[cut_off_end_date]
,[protection_premium_periods].[html_text]
,[protection_premium_periods].[created]
,[protection_premium_periods].[modified]
FROM [dbo].[protection_premium_periods]
WHERE [contract_id]= @contractId
AND convert(datetime, [start_date], 103) = convert(datetime, @startDate, 103)
AND convert(datetime, [cut_off_end_date], 103) = convert(datetime, @endDate, 103)
--AND ISNULL(CONVERT(varchar, [cut_off_end_date], 108), '1/1/0001') = @endDate
--OR ISNULL(CONVERT(varchar, [cut_off_end_date], 108), '1/1/0001') = @endDate
END
J'ai un DataSet typé qui prend le code suivant :
En base j'ai un enregistrement ayant pour id 353, startDate = '01/01/2008' et endDate = 'NULL'.DsProtectionPremiumPeriods.ROCK_PROTECTION_PREMIUM_PERIODDataTable dt =
ta.GetProtectionPremiumPeriodByDates(contractId,
startDate != DateTime.MinValue ? startDate : (DateTime?)null,
endDate != DateTime.MinValue ? endDate : (DateTime?)null);
lorsque j'exécute le code, il ne me trouve pas l'enregistrement.
J'ai vraiment essayé plein de trucs, notamment en regardant l'exemple ici http://stackoverflow.com/questions/218808?sort=newest, mais ça ne marche pas.
Quelqu'un saurait comment cela fonctionne ?
Partager