給SQL Server儲存過程,傳送陣列引數的變通辦法

iSQlServer發表於2009-02-13
最近一直在做Dnn模組的開發,過程中碰到這麼一個問題,需要同時插入N條資料,不想在程式裡控制,但是SQL Sever又不支援陣列引數.所以只能用變通的辦法了.利用SQL Server強大的字串處理傳把陣列格式化為類似"1,2,3,4,5,6"
 然後在儲存過程中用SubString配合CharIndex把分割開來

詳細的儲存過程

給SQL Server儲存過程,傳送陣列引數的變通辦法CREATE PROCEDURE dbo.ProductListUpdateSpecialList
給SQL Server儲存過程,傳送陣列引數的變通辦法    
@ProductId_Array varChar(800),
給SQL Server儲存過程,傳送陣列引數的變通辦法    
@ModuleId int
給SQL Server儲存過程,傳送陣列引數的變通辦法
AS
給SQL Server儲存過程,傳送陣列引數的變通辦法    
DECLARE @PointerPrev int
給SQL Server儲存過程,傳送陣列引數的變通辦法    
DECLARE @PointerCurr int
給SQL Server儲存過程,傳送陣列引數的變通辦法    
DECLARE @TId int
給SQL Server儲存過程,傳送陣列引數的變通辦法    
Set @PointerPrev=1
給SQL Server儲存過程,傳送陣列引數的變通辦法    
set @PointerCurr=1
給SQL Server儲存過程,傳送陣列引數的變通辦法    
給SQL Server儲存過程,傳送陣列引數的變通辦法    
begin transaction
給SQL Server儲存過程,傳送陣列引數的變通辦法    
Set NoCount ON
給SQL Server儲存過程,傳送陣列引數的變通辦法    
delete  from ProductListSpecial where ModuleId=@ModuleId
給SQL Server儲存過程,傳送陣列引數的變通辦法    
給SQL Server儲存過程,傳送陣列引數的變通辦法    
Set @PointerCurr=CharIndex(',',@ProductId_Array,@PointerPrev+1)
給SQL Server儲存過程,傳送陣列引數的變通辦法    
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev,@PointerCurr-@PointerPrevas int)
給SQL Server儲存過程,傳送陣列引數的變通辦法    
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
給SQL Server儲存過程,傳送陣列引數的變通辦法    
SET @PointerPrev = @PointerCurr
給SQL Server儲存過程,傳送陣列引數的變通辦法    
while (@PointerPrev+1 < LEN(@ProductId_Array))
給SQL Server儲存過程,傳送陣列引數的變通辦法    
Begin
給SQL Server儲存過程,傳送陣列引數的變通辦法        
Set @PointerCurr=CharIndex(',',@ProductId_Array,@PointerPrev+1)
給SQL Server儲存過程,傳送陣列引數的變通辦法        
if(@PointerCurr>0)
給SQL Server儲存過程,傳送陣列引數的變通辦法        
Begin
給SQL Server儲存過程,傳送陣列引數的變通辦法            
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,@PointerCurr-@PointerPrev-1as int)
給SQL Server儲存過程,傳送陣列引數的變通辦法            
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
給SQL Server儲存過程,傳送陣列引數的變通辦法            
SET @PointerPrev = @PointerCurr
給SQL Server儲存過程,傳送陣列引數的變通辦法        
End
給SQL Server儲存過程,傳送陣列引數的變通辦法        
else
給SQL Server儲存過程,傳送陣列引數的變通辦法            
Break
給SQL Server儲存過程,傳送陣列引數的變通辦法    
End
給SQL Server儲存過程,傳送陣列引數的變通辦法    
給SQL Server儲存過程,傳送陣列引數的變通辦法    
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,LEN(@ProductId_Array)-@PointerPrevas int)
給SQL Server儲存過程,傳送陣列引數的變通辦法    
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
給SQL Server儲存過程,傳送陣列引數的變通辦法    
Set NoCount OFF
給SQL Server儲存過程,傳送陣列引數的變通辦法    
if @@error=0
給SQL Server儲存過程,傳送陣列引數的變通辦法    
begin
給SQL Server儲存過程,傳送陣列引數的變通辦法        
commit transaction
給SQL Server儲存過程,傳送陣列引數的變通辦法    
end
給SQL Server儲存過程,傳送陣列引數的變通辦法    
else
給SQL Server儲存過程,傳送陣列引數的變通辦法    
begin
給SQL Server儲存過程,傳送陣列引數的變通辦法        
rollback transaction
給SQL Server儲存過程,傳送陣列引數的變通辦法    
end
給SQL Server儲存過程,傳送陣列引數的變通辦法
GO
給SQL Server儲存過程,傳送陣列引數的變通辦法

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-551834/,如需轉載,請註明出處,否則將追究法律責任。

相關文章