|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性比来一向在做Dnn模块的开辟,过程当中碰着这么一个成绩,必要同时拔出N条数据,不想在程序里把持,可是SQLSever又不撑持数组参数.以是只能用变通的举措了.使用SQLServer壮大的字符串处置传把数组格局化为相似"1,2,3,4,5,6"。然后在存储过程当中用SubString共同CharIndex把支解开来
具体的存储历程
CREATEPROCEDUREdbo.ProductListUpdateSpecialList
@ProductId_ArrayvarChar(800),
@ModuleIdint
AS
DECLARE@PointerPrevint
DECLARE@PointerCurrint
DECLARE@TIdint
Set@PointerPrev=1
set@PointerCurr=1
begintransaction
SetNoCountON
deletefromProductListSpecialwhereModuleId=@ModuleId
Set@PointerCurr=CharIndex(,,@ProductId_Array,@PointerPrev+1)
set@TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev,@PointerCurr-@PointerPrev)asint)
InsertintoProductListSpecial(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)asint)
InsertintoProductListSpecial(ModuleId,ProductId)Values(@ModuleId,@TId)
SET@PointerPrev=@PointerCurr
End
else
Break
End
set@TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,LEN(@ProductId_Array)-@PointerPrev)asint)
InsertintoProductListSpecial(ModuleId,ProductId)Values(@ModuleId,@TId)
SetNoCountOFF
if@@error=0
begin
committransaction
end
else
begin
rollbacktransaction
end
GO
网友Bizlogic对此的改善办法:
应当用SQL2000OpenXML更复杂,效力更高,代码更可读:
CREATEProcedure[dbo].[ProductListUpdateSpecialList]
(
@ProductId_ArrayNVARCHAR(2000),
@ModuleIdINT
)
AS
deletefromProductListSpecialwhereModuleId=@ModuleId
--Ifempty,return
IF(@ProductId_ArrayISNULLORLEN(LTRIM(RTRIM(@ProductId_Array)))=0)
RETURN
DECLARE@idocint
EXECsp_xml_preparedocument@idocOUTPUT,@ProductId_Array
InsertintoProductListSpecial(ModuleId,ProductId)
Select
@ModuleId,C.[ProductId]
FROM
OPENXML(@idoc,/Products/Product,3)
with(ProductIdint)asC
where
C.[ProductId]isnotnull
EXECsp_xml_removedocument@idoc
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引不是万能的,索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。 |
|