Utiliser la fonction comme paramètre lors de l'exécution d'une procédure stockée? [dupliquer]

cette question a déjà une réponse ici:

je teste une procédure stockée et je voulais soumettre la fonction ' GETDATE()' à la place du paramètre:

DECLARE @return_value int
EXEC @return_value = my_store procedure
        @MyId = 1,
        @MyDateField = GETDATE()
SELECT  'Return Value' = @return_value
GO

SQL Server 2005 se plaint de l'erreur suivante:

Syntaxe incorrecte near ')'.

Quelqu'un veut nous éclairer?

26
demandé sur Luke Girvin 2011-05-11 19:46:26

6 réponses

per MSDN

Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }
        ]
      [ ,...n ]
      [ WITH RECOMPILE ]
    }
[;]

    Execute a character string
    { EXEC | EXECUTE } 
        ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
        [ AS { LOGIN | USER } = ' name ' ]
    [;]

    Execute a pass-through command against a linked server
    { EXEC | EXECUTE }
        ( { @string_variable | [ N ] 'command_string [ ? ]' } [ + ...n ]
            [ { , { value | @variable [ OUTPUT ] } } [ ...n ] ]
        ) 
        [ AS { LOGIN | USER } = ' name ' ]
        [ AT linked_server_name ]
    [;]

avis pour le paramètre @vous pouvez spécifier une valeur ou une variable ou spécifier la valeur par défaut. Si vous avez pour définir la valeur d'une variable comme GetDate() (comme d'autres l'ont spécifié) et utiliser cette variable.

HTH

12
répondu Raja 2011-05-11 15:58:20

vous ne pouvez pas utiliser une fonction directement comme paramètre de procédure stocké.

vous pouvez faire ce qui suit:

DECLARE @now DateTime
SET @now = GETDATE()

DECLARE @return_value int
EXEC @return_value = my_stored_procedure
        @MyId = 1,
        @MyDateField = @now
SELECT  'Return Value' = @return_value
GO
26
répondu Oded 2014-02-05 19:56:34

les appels de fonction en tant que paramètres ne sont pas autorisés (sauf pour les fonctions de système préfixées @@ - c.-à-d. celles qui étaient appelées variables globales)

vous devez affecter à une variable.

Microsoft reconnais que ce n'est moins grande dans cet élément de connexion: T-SQL: utiliser les fonctions scalaires comme paramètres de procédure stockée

D'accord! Plus généralement, partout où TSQL attend, disons, et valeur entière, il doit accepter un littéral, une variable, ou le résultat d'une fonction dont l' le type de retour est de type entier. Il est tout à fait la langue plus régulière ("orthogonal") et plus facile à apprendre/utiliser.

cela dit, il est trop tard pour cette fonction dans le Katmai de presse, mais Je l'ajouterai à notre liste de choses à faire.

9
répondu Martin Smith 2011-05-11 15:57:19

, Vous pourriez utiliser

DECLARE @test DATE;
SET @test = GETDATE();

et ensuite

DECLARE @return_value int
EXEC @return_value = my_store procedure
        @MyId = 1,
        @MyDateField = @test
SELECT  'Return Value' = @return_value
GO
1
répondu user748261 2011-05-11 15:53:50

, Essayez:

DECLARE @return_value int
EXEC @return_value = my_store procedure
        @MyId = 1,
        @MyDateField = (SELECT GETDATE())
SELECT  'Return Value' = @return_value
GO
0
répondu garnertb 2011-05-11 15:50:45

Pourquoi devez-vous passer dans le GetDate(). Il suffit de l'utiliser dans la procédure appelée stockée.

vous ne pouvez pas le passer directement. Il suffit de l'attribuer à une variable et passer que

DECLARE @dt as datetime
SET @dt=GETDATE()

EXEC @return_value = my_store procedure
        @MyId = 1,
        @MyDateField = dt
-1
répondu Phil Murray 2014-09-26 18:28:36