在建立預存程序時,您可能會遇到將表達式的結果用作參數的困難。下面是一個範例:
<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 語句的語法
作為參考,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中文網其他相關文章!