SQL Server ストアド プロシージャ パラメーターの課題
ストアド プロシージャでパラメーターを使用すると、データベース開発が効率化されます。 ただし、ストアド プロシージャのパラメーター リスト内に式または関数の結果を直接埋め込むと、問題が発生する可能性があります。 たとえば、次のコード:
<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 以前では失敗し、「Msg 102」構文エラーが生成されます。この制限は、SQL Server がパラメーターを処理する方法に起因します。
解決策: 中間変数
回避策には、中間変数を使用することが含まれます。 SQL Server では、式の結果をパラメータとして直接埋め込むことはできません。ただし、中間変数が解決策を提供します。
修正された構文は次のとおりです:
<code class="language-sql">DECLARE @pID INT; SET @pID = 1; /* For SQL Server 2008 and later; For earlier versions, these must be separate statements */ DECLARE @string VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11)); EXEC WriteLog 'Component', 'Source', @string;</code>
式の出力 (「指定された ID が見つかりませんでした: ' CAST(@pID AS VARCHAR(11)))」を @string
変数に割り当てることで、@string
をパラメータとして WriteLog
に渡すことができます。式の結果を効果的に組み込むことができます。 SQL Server 2008 より前のバージョンでは、個別の DECLARE
ステートメントと SET
ステートメントが必要であるという重要な違いに注意してください。
以上がSQL Server で式の結果をストアド プロシージャ パラメータとして処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。