在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