将具有固定格式的text 类型中的数据分离出来的一种方法

         最近做项目中遇到了要给存储过程传一个大于8000字符的一个参数
         需求:给存储过程传一个条件取出符合条件的记录,传入的参数是一用“,”分开的数字即某个字段的ID,如:str="1,2,3,4,5,6,7,8,9,12,123,545,1230,4543.......",然后再将其放到"Select * from Users where UserID in (str)中,但是传入的字符串过长,无法将所有的ID都传进去,如果将str分成str1,str2,str3....是可以解决问题,但是这样更麻烦,且效率很底,于是将参数换成text型,但是大家都知道text型是不可以放在where语句后面的,因此要对text进行处理,我的做法是将text型的数据从逗号分开插入到一个临时表中,然后再用这个表和Users表进行inner jion,这样就可以得到要查找的数据了,操作示例如下:
None.gif CREATE     proc  spUsers_GetEmployeesByArrayIDnew
None.gif(
None.gif    
@ArrayID   text
None.gif)
None.gif
as
None.gif 
SELECT   userID  INTO  #tmp  FROM  tbEmployeeInfo  WHERE   1   =   0
None.gif    
declare   @icount   int
None.gif    
select   @icount = 0
None.gif    
declare   @userID   varchar ( 100 )
None.gif    
while ( charindex ( ' , ' , @ArrayID , @icount ) > 0 )
None.gif    
begin
None.gif        
set   @userID   =   convert ( int , substring ( @ArrayID , @icount ,( charindex ( ' , ' , @ArrayID , @icount ) -   @icount )))
None.gif        
insert   into  #tmp  values ( convert ( int , @userID ))
None.gif        
set   @icount   =   charindex ( ' , ' , @ArrayID , @icount +   1
None.gif    
end
None.gif    
Declare   @Sql   nvarchar ( 4000
None.gif    
set   @Sql =
None.gif    
' select     *
None.gif    from vi_EmployeeBaseInfo
None.gif     a inner join #tmp b on a.userID=b.userID order by a.userID
'
None.gif    
exec  sp_executesql  @Sql
None.gif    
drop   table  #tmp
None.gif
GO
None.gif
      以上方法也适合nvarchar 和  varchar型的数据
      数据只要有某种规律我们就可以使用这种分割字符串的方法对数据进行处理,来拿到我们有用格式数据来加以利用.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值