仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 525|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL教程之为SQL Server数据库传数组参数的变通办...

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引不是万能的,索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。
再见西城 该用户已被删除
沙发
发表于 2015-1-19 06:28:23 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
活着的死人 该用户已被删除
板凳
发表于 2015-1-25 14:34:36 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
莫相离 该用户已被删除
地板
发表于 2015-2-2 22:30:47 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
深爱那片海 该用户已被删除
5#
发表于 2015-2-8 15:58:52 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
小魔女 该用户已被删除
6#
发表于 2015-2-25 20:23:48 | 只看该作者
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
7#
发表于 2015-3-15 21:00:50 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
兰色精灵 该用户已被删除
8#
发表于 2015-3-22 04:15:31 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:05

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表