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中文網其他相關文章!