¿Función SQL como valor de parámetro predeterminado?


105

Intenté cambiar un valor de parámetro predeterminado con esto:

ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()

y todo lo que me dio el precompilador de SQL fue este error:

Msg 102, Nivel 15, Estado 1, Procedimiento my_sp, Línea 8 Sintaxis incorrecta cerca de '('.

Ya he creado el procedimiento. (No estoy seguro de si eso es relevante). Estaba usando un valor predeterminado nulo y comprobándolo más tarde, pero eso no parece correcto. ¿Puedo hacer esto en una línea?


Actualización: me estaba saliendo de la descripción de MSDN de los parámetros del procedimiento almacenado :

[= predeterminado] Es un valor predeterminado para el parámetro. Si se define un valor predeterminado, la función se puede ejecutar sin especificar un valor para ese parámetro.

Nota:
Se pueden especificar valores de parámetros predeterminados para funciones CLR excepto para los tipos de datos varchar (max) y varbinary (max).

Cuando un parámetro de la función tiene un valor predeterminado, la palabra clave DEFAULT debe especificarse cuando se llama a la función para recuperar el valor predeterminado. Este comportamiento es diferente de usar parámetros con valores predeterminados en procedimientos almacenados en los que omitir el parámetro también implica el valor predeterminado.

¿Estoy leyendo esto mal?

Muchas gracias.

Respuestas:


160

El valor predeterminado para el parámetro de procedimientos almacenados debe ser constante . Debería hacer lo siguiente ...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()

36
o SET @currentDate = COALESCE (@ currentDate, GETDATE ())
SQLMenace

Lo estaba usando anteriormente. "Estaba usando un valor predeterminado nulo y comprobándolo más tarde, pero no parece adecuado". Aún así, gracias Brian.
user58044

Esta solución es perfecta.
R.Katnaan

35

No creo que sea posible, tienes que usar un valor literal (constante) como predeterminado.

Sin embargo, puede hacer esto:

Set @currentDate = Coalesce(@currentDate , GetDate())

13

Puedes intentar lo siguiente:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())

8

Deduzco que está usando Microsoft SQL Server por los corchetes en su ejemplo.

Desde MSDN :

Solo un valor constante, como una cadena de caracteres; una función escalar (ya sea una función del sistema, definida por el usuario o CLR); o NULL se puede utilizar de forma predeterminada.

La función GETDATE()devuelve un valor diferente de vez en cuando, por lo que no es una expresión constante.



0

Sugerencia:

Establecer el valor predeterminado en NULL

Haga lo predeterminado GETDATE()en la interfaz.

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.