給SQL Server儲存過程,傳送陣列引數的變通辦法
最近一直在做Dnn模組的開發,過程中碰到這麼一個問題,需要同時插入N條資料,不想在程式裡控制,但是SQL Sever又不支援陣列引數.所以只能用變通的辦法了.利用SQL Server強大的字串處理傳把陣列格式化為類似"1,2,3,4,5,6"
然後在儲存過程中用SubString配合CharIndex把分割開來
詳細的儲存過程
然後在儲存過程中用SubString配合CharIndex把分割開來
詳細的儲存過程
CREATE PROCEDURE dbo.ProductListUpdateSpecialList
@ProductId_Array varChar(800),
@ModuleId int
AS
DECLARE @PointerPrev int
DECLARE @PointerCurr int
DECLARE @TId int
Set @PointerPrev=1
set @PointerCurr=1
begin transaction
Set NoCount ON
delete from ProductListSpecial where ModuleId=@ModuleId
Set @PointerCurr=CharIndex(',',@ProductId_Array,@PointerPrev+1)
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev,@PointerCurr-@PointerPrev) as int)
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
SET @PointerPrev = @PointerCurr
while (@PointerPrev+1 < LEN(@ProductId_Array))
Begin
Set @PointerCurr=CharIndex(',',@ProductId_Array,@PointerPrev+1)
if(@PointerCurr>0)
Begin
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,@PointerCurr-@PointerPrev-1) as int)
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
SET @PointerPrev = @PointerCurr
End
else
Break
End
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,LEN(@ProductId_Array)-@PointerPrev) as int)
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
Set NoCount OFF
if @@error=0
begin
commit transaction
end
else
begin
rollback transaction
end
GO
@ProductId_Array varChar(800),
@ModuleId int
AS
DECLARE @PointerPrev int
DECLARE @PointerCurr int
DECLARE @TId int
Set @PointerPrev=1
set @PointerCurr=1
begin transaction
Set NoCount ON
delete from ProductListSpecial where ModuleId=@ModuleId
Set @PointerCurr=CharIndex(',',@ProductId_Array,@PointerPrev+1)
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev,@PointerCurr-@PointerPrev) as int)
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
SET @PointerPrev = @PointerCurr
while (@PointerPrev+1 < LEN(@ProductId_Array))
Begin
Set @PointerCurr=CharIndex(',',@ProductId_Array,@PointerPrev+1)
if(@PointerCurr>0)
Begin
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,@PointerCurr-@PointerPrev-1) as int)
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
SET @PointerPrev = @PointerCurr
End
else
Break
End
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,LEN(@ProductId_Array)-@PointerPrev) as int)
Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)
Set NoCount OFF
if @@error=0
begin
commit transaction
end
else
begin
rollback transaction
end
GO
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-551834/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 給SQL Server傳送陣列引數的變通辦法(轉)SQLServer陣列
- 為SQL Server資料庫傳陣列引數的變通辦法SQLServer資料庫陣列
- jdbctemplate呼叫儲存過程傳遞陣列引數JDBC儲存過程陣列
- sql server儲存過程語法SQLServer儲存過程
- SQL Server系統儲存過程和引數示例SQLServer儲存過程
- SQL Server-儲存過程(Procedure),帶入引數和出引數SQLServer儲存過程
- 在SQL Server中使用儲存過程傳送電子郵件SQLServer儲存過程
- SQL Server系統儲存過程和引數總結SQLServer儲存過程
- SQL Server 儲存過程SQLServer儲存過程
- 【SQL Server】--儲存過程SQLServer儲存過程
- 配置SQL Server Service Broker來傳送儲存過程資料(下)SASQLServer儲存過程
- 配置SQL Server Service Broker來傳送儲存過程資料(上)CYSQLServer儲存過程
- MS SQL Server儲存過程SQLServer儲存過程
- Sql Server系列:儲存過程SQLServer儲存過程
- 解密SQL SERVER儲存過程解密SQLServer儲存過程
- Oracle 傳送郵件的儲存過程Oracle儲存過程
- oracle儲存過程中的陣列Oracle儲存過程陣列
- SQL Server 儲存過程的運用SQLServer儲存過程
- (SQL Server)分頁的儲存過程SQLServer儲存過程
- oracle儲存過程將引數字串分割sqlOracle儲存過程字串SQL
- mysql儲存過程的引數MySql儲存過程
- sql server 儲存過程中使用變數表,臨時表的分析(續)SQLServer儲存過程變數
- SQL Server基礎:儲存過程SQLServer儲存過程
- SQL server儲存過程函式SQLServer儲存過程函式
- SQL Server儲存過程中raiserror的使用SQLServer儲存過程AIError
- SQL Server儲存過程的優缺點SQLServer儲存過程
- 儲存過程的引數可以使用sql的函式儲存過程SQL函式
- SQL Server基礎之儲存過程SQLServer儲存過程
- go 如何呼叫 sqlserver 帶傳出引數的儲存過程GoSQLServer儲存過程
- 在遠端和本地儲存過程間傳遞陣列儲存過程陣列
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- SQL SERVER儲存過程AS和GO的含義SQLServer儲存過程Go
- Java呼叫SQL Server的儲存過程詳解JavaSQLServer儲存過程
- 帶輸出引數的儲存過程儲存過程
- java呼叫oracle儲存過程的自定義型別(可變陣列)JavaOracle儲存過程型別陣列
- SQL Server 禁用擴充套件儲存過程SQLServer套件儲存過程
- SQL Server 資料備份儲存過程SQLServer儲存過程
- ms sql server儲存過程目前使用模板SQLServer儲存過程