|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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的一个小镇的名字。 |
|