多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

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

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

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

最近一直在做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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲精品一区二区三区中文字幕 | 精品视频中文字幕 | 在线观看亚洲免费 | 免费在线视频播放 | 男人午夜 | 一级a性色生活片久久毛片 一级a性色生活片毛片 | 国产成人精品一区二区免费 | 国产成人亚洲精品影院 | 亚洲 欧美 日韩 综合aⅴ视频 | 欧美日本一区二区三区生 | 啪网站| 日本一区二区在线视频 | 日韩精品在线播放 | 国产女人18毛片水真多18精品 | 久久亚洲精品中文字幕二区 | 羞羞视频免费看网站 | 成人影院www在线观看 | 国产人成精品 | 免费在线看v片 | 黄色在线网站 | 不卡精品国产_亚洲人成在线 | 国产精选第一页 | 亚洲高清视频免费 | 欧美激情在线视频播放 | 国产一级毛片视频在线! | 国内成人精品亚洲日本语音 | 日韩欧美一区二区三区在线视频 | 亚洲图片综合 | 91久久大香伊蕉在人线 | 国产精品嫩草免费视频 | 手机在线精品视频每日更新 | 午夜男人天堂 | 精品免费国产一区二区三区 | 亚洲一本之道在线观看不卡 | 欧美日韩中文字幕 | 欧美性猛交xxxx乱大交极品 | 亚洲人xxx| 欧美成人看片一区二区三区 | 456亚洲人成影院在线观 | 中文字幕无线码一区二区三区 | 国产私人尤物无码不卡 |