Pregunta

Al ejecutar el siguiente utilizando una restricción smalldatetime en los resultados devueltos, consigo cero resultados:

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

o

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

Sin embargo, cuando se utiliza el siguiente argumento varchar todos los repentina i obtener resultados que corresponden al 1 Ene 2000. ¿El smalldatetime conversión implícita no funcionar para las fechas mm / día / año y únicas fechas mm / dd / aa?

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

Esto devuelve todos los resultados de 01/01/2000 cumpleaños!

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)
¿Fue útil?

Solución

"01/01/00" se convierte en base a la " dos dígito del año de corte " opción. Por lo que se convierte en 01 Ene de 2000.

Si envía '1900-01-01', entonces su código de muestra que sólo va a obtener resultados si tiene DOB = 01 Ene 1900.

Aparte de eso, está funcionando como se anuncia. A menos que desee ejecutar Execute sp_proc @DateOfBirth = DEFAULT para forzar DOB para ser ignorado

Otros consejos

Técnicamente, se debe comparar la salida de:

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

a:

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

o

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

utilizar un formato seguro como AAAAMMDD (sin guiones)

ejecutar estos también ver lo que sucede

select convert(smalldatetime,'19000101')
select convert(smalldatetime,'01/01/00')
select convert(smalldatetime,0)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top