仓酷云

标题: MSSQL网页设计MSSQL批量交换Text字符串 [打印本页]

作者: 爱飞    时间: 2015-1-16 22:23
标题: MSSQL网页设计MSSQL批量交换Text字符串
Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用字符串可是今朝有很多现存体系仍旧存在text范例的字段,由于各种缘故原由已不克不及修正数据库布局。
可是我们能够在新写的sql语句及存储过程当中接纳新的办法,以备未来mssqlserver丢弃专门针对text等范例的操纵函数后修正程序的贫苦。
上面是一个复杂的交换例子,

针对text范例的字符串交换:
设有表T(idintnotnull,infotext)
请求交换info中的abc为123
一样平常的存储历程会写成:
dropproceduredbo.procedure_1
go
setANSI_NULLSON
setQUOTED_IDENTIFIERON
go
createproceduredbo.procedure_1
as
declare@ptrvarbinary(16)
declare@IDint
declare@Positionint,@lenint
declare@strsrcchar(3)
declare@strdscchar(3)
set@strtmp=abc
set@strdsc=123
set@len=3
declarereplace_CursorscrollCursor
for
selecttextptr([info]),idfromT
forreadonly
openreplace_Cursor
fetchnextfromreplace_Cursorinto@ptr,@ID
while@@fetch_status=0
begin
select@Position=patindex(%+@strsrc+%,[info])fromTwhereid=@ID
while@Position>0
begin
set@Position=@Position-1
updatetextT.[info]@ptr@Position@len@strdsc
select@Position=patindex(%+@strsrc+%,[info])fromTwhereid=@ID
end
fetchnextfromreplace_Cursorinto@ptr,@ID
end
closereplace_Cursor
deallocatereplace_Cursor
go

个中用到了text公用的函数updatetext
如今我们改写成
dropproceduredbo.procedure_1
go

setANSI_NULLSON
setQUOTED_IDENTIFIERON
go

createproceduredbo.procedure_1
as

declare@IDint
declare@strtmpvarchar(max)
declare@strsrcchar(3),@strdscchar(3)
set@strsrc=abc
set@strdsc=123
declarereplace_CursorscrollCursor
for
selectidfromtesttable
--forreadonly
openreplace_Cursor
fetchnextfromreplace_Cursorinto@ID
while@@fetch_status=0
begin
select@strtmp=[info]fromtesttablewhereid=@ID
select@strtmp=Replace(@strtmp,@strsrc,@strdsc)
updateTset[info]=@strtmpwhereid=@ID
fetchnextfromreplace_Cursorinto@ID
end
closereplace_Cursor
deallocatereplace_Cursor
go

如许,不管info字段改成char,nchar,text都好,一样都可通用


根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
作者: 乐观    时间: 2015-1-19 10:17
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
作者: 分手快乐    时间: 2015-1-24 14:16
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
作者: 若相依    时间: 2015-2-1 16:49
是要和操作系统进行Socket通讯的场景。否则建议慎重!
作者: 山那边是海    时间: 2015-2-7 09:52
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
作者: 活着的死人    时间: 2015-2-21 15:31
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
作者: 透明    时间: 2015-3-6 20:27
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
作者: 再现理想    时间: 2015-3-13 08:17
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
作者: 飘飘悠悠    时间: 2015-3-20 17:25
对于微软系列的东西除了一遍遍尝试还真没有太好的办法




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2