Domanda

Quando si esegue il seguente utilizzando un vincolo smalldatetime sui risultati restituiti, ottengo risultati zero:

Execute sp_proc @DateOfBirth =   '01/01/1900' 

o

Execute sp_proc @DateOfBirth =   '1900-01-01' 

Ma quando si utilizza il seguente argomento varchar tutto l'improvviso ottengo risultati che corrispondono a 1 Gennaio 2000. Fa smalldatetime conversione implicita non funzionare per le date mm / gg / aaaa e uniche date mm / gg / aa?

Execute sp_proc @DateOfBirth =   '01/01/00' 

Ciò restituisce tutti i risultati per i compleanni 01/01/2000!

CREATE PROCEDURE [dbo].[sp_proc] 
    -- Add the parameters for the stored procedure here

    @DateOfBirth SmallDateTime = null 

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT *
    FROM
        view_People
    WHERE
        FirstName LIKE '%' + IsNull(@FName ,FirstName) + '%'
    AND
        LastName LIKE '%' + IsNull(@LName,LastName) + '%'
    AND
        DOB = IsNull(@DateOfBirth,DOB) 
    AND
        SSN = IsNull(@SSN,SSN)
È stato utile?

Soluzione

"01/01/00" è convertito sulla base del " due anni cifre cutoff " opzione. Così diventa 1 gennaio, 2000.

Se si invia '1900-01-01', allora il tuo codice mostra si otterrà risultati solo se si dispone di DOB = 1 gennaio 1900.

Oltre a questo, sta funzionando come pubblicizzato. A meno che non si desidera eseguire Execute sp_proc @DateOfBirth = DEFAULT per forzare DOB essere ignorato

Altri suggerimenti

Tecnicamente, si dovrebbe essere confrontando l'output di:

Execute sp_proc @DateOfBirth =   '01/01/00'

a:

Execute sp_proc @DateOfBirth =   '01/01/2000'

o

Execute sp_proc @DateOfBirth =   '2000-01-01'

utilizzare un formato sicura come AAAAMMGG (senza trattini)

eseguire questi anche per vedere cosa succede

select convert(smalldatetime,'19000101')
select convert(smalldatetime,'01/01/00')
select convert(smalldatetime,0)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top