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();

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;

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'

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.