存储过程中传入多个ID以及分割问题

把字符串传到存储过程中分割

有时候需要把多个值同时传到存储过程中去
为了避免造成程序与数据库多次交互


可以把多个ID用某个符号分隔,如"
1,2,3",用一个字符串传到存储过程里

注意:把最后的那个符号去掉,应是" 
1,2,3 "而不是" 1,2,3, "


创建分解函数:
ExpandedBlockStart.gifContractedBlock.gif
/**//*--------------------------------------------------------------------------------------------
[描述]
 分解字符串,然后将字符串存放在Table中
--------------------------------------------------------------------------------------------
*/

create FUNCTION [dbo].[uf_Split]
(
 
@Text NVARCHAR(4000),
 
@Split NVARCHAR(50= ','
)
RETURNS @Table TABLE([Id] INT IDENTITY(11NOT NULL[Value] NVARCHAR(4000))
AS
BEGIN
 
DECLARE @Oldword        NVARCHAR(4000)
 
DECLARE @FirstWord  NVARCHAR(4000)
    
DECLARE @Length         INT
    
DECLARE @CommaLocation  INT
    
SELECT @Oldword = @Text

 
SELECT @CommaLocation = CHARINDEX(@Split@Oldword)
    
WHILE (@CommaLocation > 0AND (@Oldword IS NOT NULL)
    
BEGIN
        
SELECT @CommaLocation = CHARINDEX(@Split@Oldword)
        
SELECT @Length = DATALENGTH(@Oldword)
        
SELECT @FirstWord = SUBSTRING(@Oldword1@CommaLocation -1)
        
SELECT @Oldword = SUBSTRING(@Oldword@CommaLocation + 1@Length - @CommaLocation)
       
        
INSERT INTO @Table([Value]VALUES(@FirstWord)
  
SELECT @CommaLocation = CHARINDEX(@Split@Oldword)
    
END
 
IF @Oldword IS NOT NULL
  
INSERT INTO @Table([Value]VALUES(@Oldword)
 
 
RETURN
END


调用:
方法一

select * from uf_Split('1,2,3,4',',')

方法二
declare @value nvarchar(50)
set @value = 'a,b,c'
select * from uf_Split(@value,',')

然后可以遍历这个TABLE

 

 

 

-----------------------------------------------------------------------------------------------------------------------------

 

 

1.利用replace

create table #temp
(
ss 
varchar(200not null
)
declare @str varchar(200)
declare @result varchar(1000)
set @str='aaa,bb,c,d,e,ffffff'
set @result =' insert into #temp(ss) select '''+replace(@str,',','''union select''')+''''
exec(@result)
select * from #temp
2.利用charindex和substring


create table #temp
(
ss 
varchar(200not null
)
declare @str varchar(200)
declare @curr int
declare @prev int
set @str='aaa,bb,c,d,e,ffffff'
set @curr=1
set @prev=1
while  @prev < len(@str)
begin
set @curr=charindex(',',@str,@prev)
if @curr>@prev
insert #temp select substring(@str,@prev,@curr-@prev)  
else
begin
insert  #temp select substring(@str,@prev,len(@str)-@prev+1)
break
end
set @prev=@curr+1
end
select * from #temp

转载于:https://www.cnblogs.com/lishenglyx/archive/2008/12/16/1356135.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值