Sintaxis incorrecta cerca de ')' llamando al procedimiento almacenado con GETDATE

121

Tal vez estoy teniendo un momento de 'tarde', pero ¿alguien puede explicar por qué tengo

Msg 102, Level 15, State 1, Line 2
Sintaxis incorrecta cerca de ')'.

Al correr

CREATE PROC DisplayDate 
    (@DateVar DATETIME) 
AS 
BEGIN
    SELECT @DateVar
END
GO

EXEC DisplayDate GETDATE();
Nat
fuente

Respuestas:

170

No puede pasar una llamada a función como argumento a su procedimiento almacenado. En su lugar, use una variable intermedia:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;
Trigo Mitch
fuente
22
¿Existe alguna razón para esta restricción?
Zameer
@student ¿Hay alguna razón para las restricciones básicas como la falta de tipos de columnas booleanas y enteras o la falta de claves filtradas en Oracle ...?
Patrón
20

Como mencionó Mitch Wheat, no se puede aprobar una función.

Si en su caso debe pasar un valor precalculado o GETDATE (), puede usar el valor predeterminado. Por ejemplo, modifique su procedimiento almacenado:

ALTER PROC DisplayDate 
(
    @DateVar DATETIME = NULL
) AS 
BEGIN
    set @DateVar=ISNULL(@DateVar,GETDATE())

    --the SP stuff here
    SELECT @DateVar
END
GO

Y luego prueba:

EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate

Observación : Aquí supongo que el valor NULL no está en uso para este parámetro. Si no es su caso, puede utilizar otro valor no utilizado, por ejemplo, '1900-01-01 00: 00: 00.000'

Alejandro
fuente