星期二, 7月 15, 2008

解決Sql Parameter碰上SQL Where In問題

今天在處理SqlCommand的where in在asp.net的SqlParameter使用問題,回去找了我之前問Dotjum大的文章..裡面有很不錯的解答..Winking..寫下來..大家可以參考一下ㄅ..

1.先去加入分解字串的function..(from阿城大)

Create Function fn_slip_str( @InStr nvarchar(2000) , @s_char nvarchar(1) )
Returns @tb Table ( sno int , data nvarchar(100) )
As
Begin
/*依據傳入字元進行字串分割,回傳Table*/

/*
Declare @InStr nvarchar(2000) , @s_char nvarchar(1);
Set @InStr = '字串一,字串2,字串3,字串4';
Set @s_char = ',';
*/

/*
用法
Select * From dbo.fn_slip_str('字串一,字串2,字串3,字串4',',');
*/

Set @InStr = @s_char + @InStr + @s_char;
Declare @p1 Int , @p2 Int , @data nvarchar(100) , @sno int;
Set @p1 = -1 ; Set @p2 = -1 ; Set @data = '' ; Set @sno = 0;
While ( 0 Not In (@P1,@P2) )
Begin
Set @p1 = CharIndex(@s_char,@InStr,@p1+1);
Set @p2 = CharIndex(@s_char,@InStr,@p1+1);
If ( 0 In (@p1,@p2) )
Break;
Set @data = SubString(@InStr,@p1+1,@p2-@p1-1);
if ( @data <> '' )
Begin
Set @sno = @sno +1;
Insert Into @tb ( sno , data ) Values ( @sno , @data )
End
End
Return
End

2.然後就可以很方便的用sqlParameter..Big Grin..

DECLARE @para varchar(50)
SET @para = 'ab,cd,a,b,c,d'

SELECT * FROM dbo.TestTemp
WHERE
value In (Select Data From dbo.fn_slip_str(@para,','));

DevilDevilDevilDevilDevilDevilDevilDevil....

參考:
http://www.dotblogs.com.tw/rachen/archive/2008/05/23/4110.aspx
http://www.dotblogs.com.tw/dotjum/archive/2008/04/08/2618.aspx

沒有留言: