Sie müssen eine Zwischenvariable verwenden. SQL Server unterstützt diese Art von Operation in der Parameterliste selbst nicht, obwohl sie seit einigen Jahren auf der TODO-Liste steht! (Siehe Connect Item:Skalarfunktionen als gespeicherte Prozedurparameter verwenden)
Die Grammatik für EXEC
ist
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
Die Dokumentation ist derzeit nicht so klar in Bezug auf ein akzeptables Format für value
aber es scheinen nur "einfache" Ausdrücke wie Literalwerte oder @@
zu sein vorangestellte Systemfunktionen (wie @@IDENTITY
). Andere Systemfunktionen wie SCOPE_IDENTITY()
sind nicht zulässig (auch solche, die keine Klammern erfordern, wie CURRENT_TIMESTAMP
sind nicht erlaubt).
Daher müssen Sie vorerst eine Syntax wie die folgende verwenden
DECLARE @pID INT;
SET @pID = 1;
/*If 2008+ for previous versions this needs to be two separate statements*/
DECLARE @string VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11))
EXEC WriteLog
'Component',
'Source',
@string