Domanda

Un altro sviluppatore ha creato una stored procedure che è impostato per essere eseguito come un processo SQL ogni mese. Ci vuole un parametro di datetime. Quando provo ad invocarlo nel lavoro o in solo una finestra di query ottengo un Incorrect syntax near ')' errore. La chiamata a eseguirlo è:

exec CreateHeardOfUsRecord getdate()

Quando do una data di hard coded come exec CreateHeardOfUsRecord '4/1/2010' funziona benissimo. Qualsiasi idea perché non posso usare getdate() in questo contesto? Grazie.

È stato utile?

Soluzione

parametri passati con Exec devono essere sia costanti o variabili . GetDate () è classificato come una funzione. È necessario dichiarare una variabile per contenere il risultato di GetDate (), poi passarlo alla stored procedure.

  

Il valore fornito deve essere una costante   o una variabile; Non è possibile specificare un   nome della funzione come valore di parametro.   Le variabili possono essere definite dall'utente o   variabili di sistema come ad esempio @@ SPID.

Altri suggerimenti

ESEGUI (Transact-SQL)

[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }

si può passare solo in un valore costante o una variabile o la clausola DEFAULT

provarlo:

create procedure xy_t
@p datetime
as
select @p
go

exec xy_t GETDATE()

uscita:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ')'.

Prova a passare Convert (varchar, GetDate (), 101)

Utilizzando il codice di Km: ecco un modo per farlo

create procedure xy_t 
@p datetime 
as 
select @p 
go 

declare @date datetime

set @date = getdate() 

exec xy_t @date 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top