tabla - listado de funciones en sql server
Función SQL como valor de parámetro predeterminado? (6)
Deduzco que está usando Microsoft SQL Server de los corchetes en su ejemplo.
Desde MSDN :
Solo un valor constante, como una cadena de caracteres; una función escalar (ya sea un sistema, definido por el usuario o función CLR); o NULL se puede utilizar como valor predeterminado.
La función GETDATE()
devuelve un valor diferente de vez en cuando, por lo que no es una expresión constante.
Traté de cambiar un valor de parámetro predeterminado con esto:
ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()
y todo el precompilador de SQL me dio 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 lo busco después, pero eso no parece apropiado. ¿Puedo hacer esto en una línea?
Actualización: 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:
Los valores de parámetros predeterminados se pueden especificar para las funciones de 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.
El valor predeterminado para el parámetro de procedimientos almacenados debe ser constantes . Tendría que hacer lo siguiente ...
ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()
Ese valor no es determinista y no se puede usar
No creo que eso sea posible, debe usar un valor literal (constante) como valor predeterminado.
Sin embargo, puedes hacer esto:
Set @currentDate = Coalesce(@currentDate , GetDate())
Puedes intentar lo siguiente:
Set @CurrentDate=IsNull(@CurrentDate,GetDate())
Sugerencia:
Establezca el valor predeterminado a NULL
Realice el GETDATE()
predeterminado GETDATE()
en el extremo frontal.