SQL Server ストアド プロシージャ パラメータの落とし穴: 式の結果の処理
式または関数呼び出しの出力を SQL Server ストアド プロシージャのパラメーターとして直接渡すと、エラーが発生することがよくあります。 SQL Server 2005 で発生する一般的な問題でこれを説明してみましょう。
次のコード スニペットは構文エラーを生成します:
<code class="language-sql">DECLARE @pID int; SET @pID = 1; EXEC WriteLog 'Component', 'Source', 'Could not find given id: ' + CAST(@pID AS varchar);</code>
これにより、次のエラーが発生します:
<code>Msg 102, Level 15, State 1, Line 4 Incorrect syntax near '+'.</code>
根本的な原因は? SQL Server では、ストアド プロシージャのパラメーター リスト内で式や関数の結果を直接使用することはできません。 解決策には中間変数が含まれます。
修正されたアプローチは次のとおりです:
<code class="language-sql">DECLARE @pID INT; DECLARE @logMessage VARCHAR(50); SET @pID = 1; SET @logMessage = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11)); EXEC WriteLog 'Component', 'Source', @logMessage;</code>
この改訂されたコードは、式の結果を @logMessage
に割り当て、これが 3 番目のパラメーターとして正しく認識されます。 ストアド プロシージャはエラーなしで実行されます。
重要な点に注意してください。この制限はパラメータ値にのみ適用されます。ストアド プロシージャ本体内の式は影響を受けません。
以上が式の結果をストアド プロシージャ パラメータとして正しく渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。