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?
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
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
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.
, 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
, Essayez:
DECLARE @return_value int
EXEC @return_value = my_store procedure
@MyId = 1,
@MyDateField = (SELECT GETDATE())
SELECT 'Return Value' = @return_value
GO
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