2015-06-09 45 views
0

我寫了一個完美的SP。我用常規參數調用SP並工作。不過,現在我需要調用SP像下面爲什麼它不接受一個連接的字符串作爲SP中的參數?

EXEC @v_nReturn = sp_get_next_value 'LP_' + @WhID + '_COUNTER' 

智能感知給人第一'+'標誌錯誤。

它說: 「不正確的語法犯錯......」

@WhIDNVARCHAR(10),所以我不應該將其轉換爲NVARCHAR

是什麼問題?

+3

不幸的是,你不能連接並創建一個字符串,同時將它作爲參數傳遞給一個過程,使用一個變量,通過連接字符串來設置它,然後將該變量傳遞給過程 – ughai

+0

我剛試過,它工作。請將其作爲回答發佈 –

回答

1

SQL Server不這樣做,當你調用存儲過程(全)表達分析。這絕對是一個小變化非常方便的領域,雖然可能有充分的理由限制。

正如評論所說,用一個單獨的變量:

DECLARE @arg varchar(256) = 'LP_' + @WhID + '_COUNTER'; 
EXEC @v_nReturn = sp_get_next_value @arg; 

要小心,如果@WhID是數字。然後,您需要先將該值轉換爲字符串。

+0

我不知道存儲過程中的代碼。但是我想警告未經檢查的字符串連接並將其作爲參數傳遞是** SQL Injection **的可能之門。 –

1

嘗試用括號:

EXEC @v_nReturn = (sp_get_next_value 'LP_' + @WhID + '_COUNTER') 
相關問題