在sqlserver存儲過程中給in參數傳帶逗號值的辦法,如傳'1','2','3'這樣的


最近在一項目修改中,要在存儲過程中給in參數傳值,語句寫的也對,但怎么執行都得不出結果,如果把這語句直接賦值、執行,卻能得出結果,很是奇怪,如:

直接執行select schoolname from school_info where code in('01','02'),是可以得出結果的,但在存儲過程中,使用

declare @area varchar(120);
set @area='01'+','+'02';
select schoolname from school_info where code in(@area),卻得不出去結果。  

想着可能是@area賦值的寫法有問題,但試過多種辦法都不行。嘗試着用組成動態sql語句, 用exec執行的方法,是沒有問題,能得出結果的,但總感覺這樣有點怪怪的,不是想要的理想中解決辦法。

后來終於在網上找一個解決辦法,測試后,沒有問題,用着很方便。就是建一個函數,建好后,列在函數的表值函數下面,語句如下:

create    function    [ dbo ]. [ f_split ]( @c    varchar( 2000), @split    varchar( 2))   
returns    @t    table(col    varchar( 20))   
as   
     begin     
       while( charindex( @split, @c) <> 0)   
         begin   
           insert    @t(col)    values   ( substring( @c, 1, charindex( @split, @c) - 1))   
           set    @c    =    stuff( @c, 1, charindex( @split, @c), '')   
         end   
       insert    @t(col)    values   ( @c)   
       return   
     end

然后使用的時候呢,語句如下:

select schoolname  from school_info where code in(select col from [dbo].[f_split](@area,','))
這樣再執行存儲過程,給in傳入帶逗號值的參數,都能正確得出結果了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM