ストアド プロシージャを作成する場合、式の結果をパラメータとして使用するときに問題が発生する場合があります。以下に例を示します:
<code class="language-sql">DECLARE @pID int; SET @pID = 1; EXEC WriteLog 'Component', 'Source', 'Could not find given id: ' + CAST(@pID AS varchar);</code>
ただし、このコードはエラーをスローします (SQL Server 2005):
<code>Msg 102, Level 15, State 1, Line 4 Incorrect syntax near '+'.</code>
文法エラーの説明
SQL Server では、パラメーター リストでのこのような操作は許可されていません。引数はリテラル値、宣言された変数、または演算子のない式であることが期待されます。
解決策: 中間変数を使用します
この問題を解決するには、中間変数を使用する必要があります。以下の修正されたコードは、このアプローチを示しています:
<code class="language-sql">DECLARE @pID INT; SET @pID = 1; DECLARE @logMessage VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11)); EXEC WriteLog 'Component', 'Source', @logMessage;</code>
実行ステートメントの構文
参考までに、EXEC ステートメントの構文は次のとおりです。
<code class="language-sql">[ { EXEC | EXECUTE } ] { [ @return_status = ] { module_name [ ;number ] | @module_name_var } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } ] [ ,...n ] [ WITH <execute_option> [ ,...n ] ] } [;]</execute_option></code>
現在の制限
SQL Server では、パラメータ リスト内のパラメータに許容される値は、リテラル値と @@ の接頭辞が付いたシステム関数に制限されます。 SCOPE_IDENTITY() などの関数はサポートされていません。
以上が式の結果をパラメータとして SQL Server ストアド プロシージャに渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。