仓酷云

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

[学习教程] MSSQL网页设计MSSQL批量交换Text字符串

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

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

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

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

本版积分规则

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

GMT+8, 2024-12-22 23:01

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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