convertir en appel de procédure stockée?

J'ai le morceau de SQL suivant qui ne fonctionne pas:

declare @id INT; set @id=0; exec insert_mail @id OUTPUT, 'ZLgeOZlqRGC6l57TyD/xYQ==', 4928, '2010\01\14\14\03131_2.eml', 'Suz, Katie and Kourtney''s Housewarming Party', CONVERT(DATETIME, '2015-01-18 14:03:13', 120); select @id; 

et le changer de cette façon le fixe:

 declare @id INT; set @id=0; declare @p_valid_until datetime; set @p_valid_until=CONVERT(DATETIME, '2015-01-18 14:03:13', 120) exec insert_mail @id OUTPUT, 'ZLgeOZlqRGC6l57TyD/xYQ==', 4928, '2010\01\14\14\03131_2.eml', 'Suz, Katie and Kourtney''s Housewarming Party', @p_valid_until; select @id; 

Quelqu'un peut-il expliquer?

À la vôtre, Jan

Dans le premier cas, vous appelez la fonction CONVERT dans une command execute qui n'est pas autorisée. Vous ne pouvez pas appeler des fonctions lors du passage d'arguments

 EXECUTE insert_mail ... CONVERT(DATETIME, '2015-01-18 14:03:13', 120) 

Je ne vois pas le point d'utiliser la fonction de conversion. Entrez simplement la date sans convertir.

Vous ne pouvez pas appeler des fonctions lors du passage d'arguments. Ces valeurs de parameters devraient être des constantes ou des parameters.

Vous ne pouvez pas passer de fonctions, etc. à des procédures stockées, seulement des variables ou des valeurs constantes …