飘灵儿 发表于 2015-1-16 22:36:23

MSSQL网页设计SQL 中本人创立函数,支解字符串

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

/**

*版权:石太祥一切;

*

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

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

*QQ:9690501

*

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

*/

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

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

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

ifexists(select*fromdbo.sysobjectswhereid=object_id(N.)andxtypein(NFN,NIF,NTF))
dropfunction.
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的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!

不帅 发表于 2015-2-10 01:07:20

其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。

若天明 发表于 2015-2-28 10:56:14

一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)

金色的骷髅 发表于 2015-3-9 22:53:38

两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书

小妖女 发表于 2015-3-17 03:05:25

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!

只想知道 发表于 2015-3-23 17:35:47

备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
页: [1]
查看完整版本: MSSQL网页设计SQL 中本人创立函数,支解字符串