SQL Server資料庫預存程序中拼接字串注意的問題

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   io   使用   ar   strong   

  在SQL Server資料庫中書寫複雜的預存程序時,一般的做法是拼接字串,最後使用EXEC sp_executesql ‘拼接的字串‘ 查詢出結果。

先看一段代碼:

 1 -- ============================================= 2 -- Author:        XXX 3 -- Create date: 2014-09-19 4 -- Description:    擷取學生列表資訊 5 -- ============================================= 6 ALTER PROCEDURE [dbo].[Sp_GetStudentList] 7     @StudentId INT   --主鍵id 8 AS 9 BEGIN10     11     SET NOCOUNT ON;12     13     DECLARE @SqlSelectResult NVARCHAR(MAX) = ‘‘;    14     SET @SqlSelectResult = ‘SELECT * FROM Student AS s ‘;15     16     IF (ISNULL(@StudentId, 0) > 0)17     BEGIN18         SET @SqlSelectResult = @SqlSelectResult + ‘ WHERE s.ClassId > ‘ + @StudentId;19     END20     21     PRINT (@SqlSelectResult);22     23     EXEC sp_executesql @SqlSelectResult;24     25     SET NOCOUNT OFF;26 END

然後調用該預存程序:EXEC Sp_GetStudentList 1。結果如下:

 

運行失敗。

仔細分析原因發現:預存程序參數@StudentId 類型為INT(整形)型;而自訂變數@SqlSelectResult是NVARCHAR(MAX)字串類型。

在23行,EXEC sp_executesql @SqlSelectResult;執行拼接字串時,報錯,編譯器嘗試將字串類型轉換成int類型失敗。

意思是:SQL Server中在拼接字串時,所有的變數必須全部是字串類型,才能正確拼接,否則報錯。

解決方案1:將非字串類型的變數轉換為字串類型,

                   將18行代碼修改為:

        SET @SqlSelectResult = @SqlSelectResult + ‘ WHERE s.ClassId > ‘ + convert(nvarchar(10),@StudentId);

解決方案2:在預存程序開始定義的時候,將參數定義為字串類型
               ALTER PROCEDURE [dbo].[Sp_GetStudentList]               @StudentId INT   --主鍵id               AS
……

 

 

 

SQL Server資料庫預存程序中拼接字串注意的問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.