仓酷云

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

[学习教程] MSSQL教程之一个交织表

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

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

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

x
Federated将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
一个交织表.用字段明做为值:原表数据为:
字段1字段2字段3
A1B1C1
A2B2C2
变更后:
COL1COL2COL3
字段1A1A2
字段2B1B2
字段3C1C2

createtabletablename(字段1varchar(100),字段2varchar(100),字段3varchar(100))
inserttablenameselectgsm900/1800mhz/gprs,85*44*21mm,80
unionallselectgsm900/1800mhz/gprs,82*46*21.5mm,79
go


SELECTtop0
字段名=a.name
intoabc
FROMsyscolumnsa
innerjoinsysobjectsdona.id=d.id
leftjoinsyspropertiesfond.id=f.idandf.smallid=0
whered.xtype=Uandd.name=tablename
orderbya.id,a.colorder


SELECTtop0
note=a.name
intoabcd
FROMsyscolumnsa
innerjoinsysobjectsdona.id=d.id
leftjoinsyspropertiesfond.id=f.idandf.smallid=0
whered.xtype=U--暗示用户范例
andd.name=tablename--必要猎取字段的表
orderbya.id,a.colorder

declare@numint,@Colvarchar(50),@Namevarchar(200),@Name1varchar(200),@countint,@num1varchar(5)
select@num=1

select@count=count(*)fromtablename

while(@count>0)
begin
select@Col=Col+convert(varchar,@num)
exec(ALTERTABLEabcadd[+@Col+]varchar(200)NULL)
select@num=@num+1
set@count=@count-1
end

DECLAREAddNameColumns_CursorINSENSITIVECURSOR--取字段值
FOR
SELECT
filedname=a.name
FROMsyscolumnsa
innerjoinsysobjectsdona.id=d.id
leftjoinsyspropertiesfond.id=f.idandf.smallid=0
whered.xtype=Uandd.name=tablename
orderbya.id,a.colorder

OPENAddNameColumns_Cursor
BEGIN
FETCHNEXTFROMAddNameColumns_CursorINTO@Name--对应响应字段值
WHILE@@FETCH_STATUS=0
BEGIN

insertintoabc(字段名)
selectfname=@Name

deleteabcd
exec(insertintoabcd(note)selectname=[+@Name+]fromtablename)
select@num=1
DECLAREAddNameColumns_Cursor1INSENSITIVECURSOR
FORselectnotefromabcd
OPENAddNameColumns_Cursor1
BEGIN
FETCHNEXTFROMAddNameColumns_Cursor1INTO@Name1
WHILE@@FETCH_STATUS=0
BEGIN

select@num1=convert(varchar,@num)

exec(updateabcset[Col+@num1+]=+@Name1+where字段名=+@Name+)

printupdateabcset[+@Col+]=+@Name1+where字段名=+@Name+

select@num=@num+1

FETCHNEXTFROMAddNameColumns_Cursor1INTO@Name1
END
END
CLOSEAddNameColumns_Cursor1
DEALLOCATEAddNameColumns_Cursor1

FETCHNEXTFROMAddNameColumns_CursorINTO@Name
END
END
CLOSEAddNameColumns_Cursor
DEALLOCATEAddNameColumns_Cursor

select*fromabc
SELECT*FROMtablename

droptabletablename
droptableabc
droptableabcd

从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。
小魔女 该用户已被删除
沙发
发表于 2015-1-19 19:11:16 | 只看该作者
换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的
小妖女 该用户已被删除
板凳
发表于 2015-2-5 20:21:24 | 只看该作者
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
飘灵儿 该用户已被删除
地板
发表于 2015-2-13 12:51:29 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
admin 该用户已被删除
5#
发表于 2015-3-3 21:22:11 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
灵魂腐蚀 该用户已被删除
6#
发表于 2015-3-11 13:53:29 | 只看该作者
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
深爱那片海 该用户已被删除
7#
发表于 2015-3-18 17:47:02 | 只看该作者
我个人认为就是孜孜不懈的学习
乐观 该用户已被删除
8#
发表于 2015-3-26 07:40:44 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-27 23:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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