仓酷云

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

[学习教程] MSSQL网页设计SQL 中本人创立函数,支解字符串

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

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

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

x
Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用创立|函数|字符串
----------------------------------------------------------------

/**

*版权:石太祥[E.Alpha]一切;

*

*email:ealpha(AT)msn(DOT)com;

*msn:ealpha(AT)msn(DOT)com;

*QQ:9690501

*

*一切转载请说明本信息!

*/

----------------------------------------------------------------

ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[getEPnum])andxtypein(NFN,NIF,NTF))
dropfunction[dbo].[getEPnum]
GO

ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[getstrcount])andxtypein(NFN,NIF,NTF))
dropfunction[dbo].[getstrcount]
GO

ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[getstrofindex])andxtypein(NFN,NIF,NTF))
dropfunction[dbo].[getstrofindex]
GO

SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSON
GO



---这个函数间接挪用了别的的两个函数,能够先浏览上面提到的两个函数
CREATEfunctiongetEPnum(@strvarchar(8000))
returnsvarchar(8000)
as
begin
declare@str_returnvarchar(8000)
declare@iint
declare@temp_iint
declare@onlineornotint
declare@findepnumokint

--用来获得一个epnum,
--划定规矩:起首从chatid中取,假如有在线得,则获得最后面得在线得前往
--假如全体不在线,则前往‘00000000’

select@findepnumok=0
select@temp_i=0

IFlen(@str)<=0
begin
SELECT@str_return=00000000
end
else
begin
select@i=dbo.getstrcount(@str,,)

WHILE@temp_i<@i
BEGIN
select@onlineornot=onlinefromwwchat_userwhereepnum=dbo.getstrofindex(@str,,,@temp_i)
IF(@onlineornot=1)
begin
select@str_return=dbo.getstrofindex(@str,,,@temp_i)
select@findepnumok=1--找到epnum后置为1
BREAK
end
ELSE
begin
select@temp_i=@temp_i+1
select@findepnumok=0--找不到epnum后置为1
end
END

if@findepnumok=0
begin
SELECT@str_return=00000000
end
end

return@str_return
end


GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO

SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSON
GO



--getstrcount输出一个没有支解的字符串,和支解符
--前往数组的个数



CREATEfunctiongetstrcount(@strvarchar(8000),@splitstrvarchar(100))
--returnsvarchar(8000)
returnsint
as
begin
declare@int_returnint
declare@startint
declare@nextint

declare@locationint

select@next=0
select@location=1


iflen(@str)<len(@splitstr)
select@int_return=0
ifcharindex(@splitstr,@str)=0
select@int_return=0

while(@location0)
begin
select@start=@location+1
select@location=charindex(@splitstr,@str,@start)
select@next=@next+1
select@int_return=@next

end

return@int_return
end




GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO

SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSON
GO



--getstrofindex输出一个未支解的字符串,恬逸支解标记,恬逸要获得的字符地位
--前往制订地位的字符串
CREATEfunctiongetstrofindex(@strvarchar(8000),@splitstrvarchar(4),@indexint=0)
returnsvarchar(8000)
as
begin
declare@str_returnvarchar(8000)
declare@startint
declare@nextint
declare@locationint

select@start=1
select@next=1--假如习气从0入手下手则select@next=0
select@location=charindex(@splitstr,@str,@start)
while(@location0and@index>@next)

begin
select@start=@location+1
select@location=charindex(@splitstr,@str,@start)
select@next=@next+1
end

if@location=0select@location=len(@str)+1--假如是由于没有逗号加入,则以为逗号在字符串后
select@str_return=substring(@str,@start,@location-@start)--@start一定是逗号以后的地位大概就是初始值1
if(@index@next)select@str_return=--假如两者不相称,则是由于逗号太少,大概@index小于@next的初始值1。

return@str_return
end


GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO


InnoDB数据表的索引,与InnoDB数据表相比,在InnoDB数据表上,索引对InnoDB数据表的重要性要大得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。
冷月葬花魂 该用户已被删除
沙发
发表于 2015-1-19 18:10:13 | 只看该作者
分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
板凳
发表于 2015-1-26 09:34:56 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
柔情似水 该用户已被删除
地板
发表于 2015-2-4 13:45:36 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
不帅 该用户已被删除
5#
发表于 2015-2-10 01:07:20 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
若天明 该用户已被删除
6#
发表于 2015-2-28 10:56:14 | 只看该作者
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
金色的骷髅 该用户已被删除
7#
发表于 2015-3-9 22:53:38 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
小妖女 该用户已被删除
8#
发表于 2015-3-17 03:05:25 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
只想知道 该用户已被删除
9#
发表于 2015-3-23 17:35:47 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-6 21:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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