2010-06-19 209 views
9

Quiero saber por qué no puedo establecer el valor por defecto de parámetros de fecha y hora a SP a getdate() de la siguiente manera:¿Por qué no podemos establecer el valor predeterminado del parámetro datetime en el procedimiento almacenado = getDate()?

Create PROCEDURE [dbo].[UPILog] 
(
    @UserID bigint, 
    @ActionID smallint, 
    @Details nvarchar(MAX) = null, 
    @Created datetime = getdate() 
) 

si trato de guardarlo me dará un error de compilación

Msg 102, Level 15, State 1, Procedure UPILog, Line XX 
    Incorrect syntax near '('. 

EDIT: sé que puedo hacerlo, como a continuación

Create PROCEDURE [dbo].[UPILog] 
(
    @UserID bigint, 
    @ActionID smallint, 
    @Details nvarchar(MAX) = null, 
    @Created datetime = null 
) 
AS 
if @Created is null 
    SET @Created=getdate() ... 

Respuesta

3

no se puede utilizar una llamada de función como un valor de parámetro predeterminado.

Es fácil de evitar: establezca su parámetro de llamada en getdate() si no está configurado.

+0

por qué no puedo usarlo ... ¿no será fácil hacer un motor sql? –

+0

¿Hay alguna explicación de por qué no puede aceptar esto ... o es una regla como SQL SERVER que no puede llamar a la función como un parámetro predeterminado –

+0

tiene que ser un valor constante. –

1

en términos simples tiene que ser de algún valor constante y GetDate() es una llamada a función.

17

Si desea utilizar @Created como predeterminado, establezca null como el valor de parámetro predeterminado y establezca el parámetro @Created con getdate() si viene con nulo en su sp.

... 
    @CreateDate datetime = null 
) 
AS 
    if @CreateDate is null 
     set @CreateDate = getdate() 
... 
0

No se puede usar una función como valor de parámetro. Lo que hago es establecer el parámetro en una fecha fuera del alcance como '1900-01-01' y luego verificarlo en el proceso. por ejemplo:

CREATE PROC uspDataCompare 
    @CompareDate DATE = '1900-01-01' 
AS 

IF @CompareDate = '1900-01-01' SET @CompareDate = CONVERT(DATE, GETDATE()) 
Cuestiones relacionadas