最近在一項目修改中,要在存儲過程中給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執行的方法,是沒有問題,能得出結果的,但總感覺這樣有點怪怪的,不是想要的理想中解決辦法。
后來終于在網上找一個解決辦法,測試后,沒有問題,用著很方便。就是建一個函數,建好后,列在函數的表值函數下面,語句如下:
createfunction[dbo].[f_split](@cvarchar(2000),@splitvarchar(2))returns@ttable(colvarchar(20))asbeginwhile(charindex(@split,@c)<>0)begininsert@t(col)values(substring(@c,1,charindex(@split,@c)-1))set@c=stuff(@c,1,charindex(@split,@c),'')endinsert@t(col)values(@c)returnend然后使用的時候呢,語句如下:
select schoolname from school_info where code in(select col from [dbo].[f_split](@area,','))這樣再執行存儲過程,給in傳入帶逗號值的參數,都能正確得出結果了。新聞熱點
疑難解答