给SQL Server存储过程,传送数组参数的变通办法

博主在Dnn模块开发中,遇到需同时插入N条数据的问题,因SQL Server不支持数组参数,采用变通办法,将数组格式化为字符串,在存储过程中用SubString和CharIndex分割字符串,实现批量插入,并给出详细存储过程代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 最近一直在做Dnn模块的开发,过程中碰到这么一个问题,需要同时插入N条数据,不想在程序里控制,但是SQL Sever又不支持数组参数.所以只能用变通的办法了.利用SQL Server强大的字符串处理传把数组格式化为类似"1,2,3,4,5,6"
 然后在存储过程中用SubString配合CharIndex把分割开来

详细的存储过程

None.gifCREATE PROCEDURE dbo.ProductListUpdateSpecialList
None.gif    
@ProductId_Array varChar(800),
None.gif    
@ModuleId int
None.gif
AS
None.gif    
DECLARE @PointerPrev int
None.gif    
DECLARE @PointerCurr int
None.gif    
DECLARE @TId int
None.gif    
Set @PointerPrev=1
None.gif    
set @PointerCurr=1
None.gif    
None.gif    
begin transaction
None.gif    
Set NoCount ON
None.gif    
delete  from ProductListSpecial where ModuleId=@ModuleId
None.gif    
None.gif    
Set @PointerCurr=CharIndex(',',@ProductId_Array,@PointerPrev+1)
None.gif    
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev,@PointerCurr-@PointerPrevas int)
None.gif    
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
None.gif    
SET @PointerPrev = @PointerCurr
None.gif    
while (@PointerPrev+1 < LEN(@ProductId_Array))
None.gif    
Begin
None.gif        
Set @PointerCurr=CharIndex(',',@ProductId_Array,@PointerPrev+1)
None.gif        
if(@PointerCurr>0)
None.gif        
Begin
None.gif            
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,@PointerCurr-@PointerPrev-1as int)
None.gif            
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
None.gif            
SET @PointerPrev = @PointerCurr
None.gif        
End
None.gif        
else
None.gif            
Break
None.gif    
End
None.gif    
None.gif    
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,LEN(@ProductId_Array)-@PointerPrevas int)
None.gif    
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
None.gif    
Set NoCount OFF
None.gif    
if @@error=0
None.gif    
begin
None.gif        
commit transaction
None.gif    
end
None.gif    
else
None.gif    
begin
None.gif        
rollback transaction
None.gif    
end
None.gif
GO
None.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值