日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > Sqlserver > 給SQL Server傳送數組參數的變通辦法

給SQL Server傳送數組參數的變通辦法

來源:程序員人生   發布時間:2014-03-01 07:42:09 閱讀次數:2825次

最近一直在做Dnn模塊的開發,過程中碰到這么一個問題,需要同時插入N條數據,不想在程序里控制,但是SQL Sever又不支持數組參數.所以只能用變通的辦法了.利用SQL Server強大的字符串處理傳把數組格式化為類似"1,2,3,4,5,6"。然后在存儲過程中用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

網友Bizlogic對此的改進方法:

應該用SQL2000 OpenXML更簡單,效率更高,代碼更可讀:

以下為引用的內容:

CREATE Procedure [dbo].[ProductListUpdateSpecialList]
(
@ProductId_Array NVARCHAR(2000),
@ModuleId INT
)

AS

delete from ProductListSpecial where ModuleId=@ModuleId

-- If empty, return
IF (@ProductId_Array IS NULL OR LEN(LTRIM(RTRIM(@ProductId_Array))) = 0)
RETURN

DECLARE @idoc int

EXEC sp_XML_preparedocument @idoc OUTPUT, @ProductId_Array

Insert into ProductListSpecial (ModuleId,ProductId)
Select
@ModuleId,C.[ProductId]
FROM
OPENXML(@idoc, '/Products/Product', 3)
with (ProductId int ) as C
where
C.[ProductId] is not null

EXEC sp_XML_removedocument @idoc

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产中文在线播放 | 中文成人在线 | 国产一区二区精品免费 | 99热一区| 麻豆视频一区二区 | 精品国产一区二区三区久久久 | 中文字幕亚洲国产 | 国产精品久久久久久久午夜 | 国产成人在线视频网站 | 日韩欧美一区二区三区免费观看 | 亚洲欧美一区二区久久 | 久久精品成人热国产成 | 国产毛片久久久久久国产毛片 | www.夜夜操.com | 国产精品一区一区三区 | 亚洲一区二区三区四区视频 | swag国产精品一区二区 | 亚洲经典自拍 | 久久久91 | 国产一二区 | 色天天综合网 | 麻豆视频传媒入口 | 精品国产污污免费网站精东 | 国产高清在线观看 | 日韩精品影院 | 一级特黄录像免费播放全99 | 亚洲久久视频 | 能看的av| 国产精品一区在线播放 | 国产一区二区 | 毛片视频播放 | 国产自产21区 | 亚洲精品一区二区三区不 | 欧美日本片 | 国产美女一区二区三区 | 岛国视频在线观看 | 久久99国产精一区二区三区 | 91精品国产乱码久久久久久 | 亚洲天堂电影网 | 不卡一区二区三区四区 | 天天舔天天干天天操 |