中間変数を使用する必要があります。 SQL Serverは、パラメータリスト自体でこの種の操作をサポートしていませんが、それはTODOリストに数年間あります。
grammar for EXEC
は、ドキュメントは現在value
のための許容可能な形式上のものは明らかではないが、そのようなリテラル値または@@
接頭辞のシステム機能としてのみ「単純な」表現であるように思わ
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
です(Connect Item: Use scalar functions as stored procedure parametersを参照してください) (例えば、@@IDENTITY
)。 SCOPE_IDENTITY()
などの他のシステム機能は許可されていません(CURRENT_TIMESTAMP
などのかっこを必要としないシステム機能も許可されていません)。
だから、時間のためにあなたは、以下
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
私は中間変数を避けることを望んでいました。それらを導入せずにこれを行う適切な方法はありますか? – WorkerThread
ああ、ちょうどあなたの説明を見た。これを明確にしていただきありがとうございます。 – WorkerThread
@Worker - それはちょっと面倒です。 MSはここで確認しますhttps://connect.microsoft.com/SQLServer/feedback/details/352110/t-sql-use-scalar-functions-as-stored-procedure-parameters –