佩特來項目經驗小集合(2)___組合查詢預存程序,報錯 "varchar JBID='' 轉換成資料類型 int 時失敗",
今天寫一個組合查詢的預存程序遇到這樣一個問題:在將 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' 轉換成資料類型 int 時失敗。錯誤詳情: 經百度:字串變數和整型變數串連不能用+串連。於是我採用cast()函數將DLSJB這個整型變數轉換成字串,這樣問題就解決了。正確代碼如下所示:
ALTER PROCEDURE [dbo].[Proc_SH_WXJDList]@DH varchar(50), --單號@DLSJB int, --代理商層級ID@DLSName varchar(100) --代理商姓名ASBEGINDeclare @sqlStr varchar(800) --儲存sql語句Set @sqlStr = 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1'--合成sql語句,不輸入條件則選擇全部 if(@DH!='')--判斷是寫單號set @sqlStr = @sqlStr + ' and DH like ''%' + @DH + '%''' if(@DLSJB!= -1 ) --判斷是否選擇代理商層級set @sqlStr = @sqlStr + ' and JBID ='+''''+cast(@DLSJB as varchar(5))+''''if(@DLSName!='')--判斷是否選擇代理商名set @sqlStr = @sqlStr + ' and DLSName like ''%' + @DLSName + '%''' EXEC (@sqlStr + 'ORDER BY DH DESC')END
cast()是一個轉換函式,跟我們在asp.net中使用的Convert函數一樣,都是一種資料類型轉換到另一種資料類型。這篇文章恰恰是使用cast()函數使整型變數強制轉換成字串型,這樣字串型之間就可以使用+進行串連了。